기초 변수(Primitive Variable)
값이 저장
크기가 정해져 있음 → jvm이 미리 공간 설계 가능
예시) 사람의 이름 : 2자리, 3자리 등 가변적
주민등록번호 : 13자리 (int→52Byte, →13Byte)
성별 : 1자리
예시) 카톡 채팅 메세지 : 자료형 설계
분석 : 가장 길었던 메세지 10000자
기초변수로 자료형 설계 가능 → char 10000개 = 20000Byte
최대로 설계해서 메모리가 낭비됨
⇒ 기초 변수로 설계 못하고 참조 변수를 사용
참조 변수(Reference Variable)
크기를 알 수 없을 때
값이 아닌 주소 값(포인터)이 들어있음
예시) n=*1000
1000번지에 가보니 값이 있음
this
현재 객체 자신
컴파일러에서 자동 생성
매개 변수의 이름과 필드의 이름이 동일한 경우 사용해서 구분
this()
다른 생성자
생성자 안에서만 호출 가능
반드시 첫 번째 문장이여야 함
다른 생성자를 호출할 때만 사용
연습문제
package ex04; public class DeskLamp { private boolean isOn; public void turnOn(){ isOn = true; } public void turnOff(){ isOn = false; } @Override public String toString() { return "현재 상태는 " + (isOn == true ? "켜짐" : "꺼짐"); } }
package ex04; public class DeskLampTest { public static void main(String[] args) { DeskLamp myLamp = new DeskLamp(); myLamp.turnOn(); System.out.println(myLamp); myLamp.turnOff(); System.out.println(myLamp); } }
package ex04; class Box { int width; int length; int height; double getVoume(){ return (double) width * height * length; } } public class BoxTest{ public static void main(String[] args) { Box b; b = new Box(); b.width = 20; b.length = 20; b.height = 30; System.out.println("상자의 가로, 세로, 높이는 " + b.width + ", " + b.length + ", " + b.height + "입니다."); System.out.println("상자의 부피는 " + b.getVoume() + "입니다."); } }
package ex04; public class Television { int channel; int volume; boolean onOff; public static void main(String[] args) { Television myTv = new Television(); myTv.channel = 7; myTv.volume = 10; myTv.onOff = true; Television yourTv = new Television(); yourTv.channel = 9; yourTv.volume = 12; yourTv.onOff = true; System.out.println("나의 텔레비전의 채널은 " + myTv.channel + "이고 볼륨은 " + myTv.volume + "입니다."); System.out.println("너의 텔레비전의 채널은 " + yourTv.channel + "이고 볼륨은 " + yourTv.volume + "입니다."); } }
UML(Unified Modeling Language)
소프트웨어 시스템을 시각적으로 표현
클래스 다이어그램 (Class Diagram)
시스템의 클래스, 클래스의 속성, 동작 방식, 객체 간 관계를 표시하여 시스템의 구조를 보여주는 정적 구조 다이어그램
toString : 상태확인
public boolean getIsOn()없이 참조변수만 있어도 자동실행
연습문제
package ex03; class GugudanUtil{ static void gugudan(int x){ //파라미터도 stack에서 만들어짐 for (int i = 1; i <= 9; i++) { System.out.println(x + "*" + i + "=" + (x * i)); } System.out.println(); } } public class GugudanEx04 { public static void main(String[] args) { GugudanUtil.gugudan(10); } }
1차 개발자 : 라이브러리를 만든 개발자
2차 개발자 : 만들어진 라이브러리로 만든 개발자
2차 개발자에게 사용방법 설명하는 방법
public class GugudanEx04 { public static void main(String[] args) { //구구단을 출력해주는 메서드 //ex) GugudanUtil.gugudan(5); //GugudanUtil 클래스에 gugudan 정적 메서드를 호출하시오. //파라미터는 int 1개가 필요합니다. } }
검증 : 최소 몇 가지 실행 > 실무에 적용
메소드 오버로딩
같은 이름의 메소드가 여러개 존재 가능 ⇒ 중복정의
생성자
객체가 생성될 때 초기화하는 특수한 메소드
기본 생성자 : 매개변수가 없음
연습문제
package ex04; public class MyMath { int add(int x, int y){ return x+y; } int add(int x, int y, int z){ return x + y + z; } int add(int x, int y, int z, int w){ return x + y + z + w; } public static void main(String[] args) { MyMath obj; obj = new MyMath(); System.out.print(obj.add(10, 20) + " "); System.out.print(obj.add(10, 20, 30) + " "); System.out.print(obj.add(10, 20, 30, 40) + " "); } }
package ex04; class Pizza { int size; String type; public Pizza(){ size = 12; type = "슈퍼슈프림"; } public Pizza(int s, String t){ size = s; type = t; } } public class PizzaTest{ public static void main(String[] args) { Pizza obj1 = new Pizza(); System.out.println("(" + obj1.type + "," + obj1.size + ",)"); Pizza obj2 = new Pizza(24, "포테이토"); System.out.println("(" + obj2.type + "," + obj2.size + ",)"); } }
package ex04; class Television01 { private int channel; private int volume; private boolean onOff; Television01(int c, int v, boolean o) { channel = c; volume = v; onOff = o; } void print(){ System.out.println("채널은 " + channel + "볼륨은 " + volume + "입니다."); } } public class TelevisionTest{ public static void main(String[] args) { Television01 myTv = new Television01(7, 10, true); myTv.print(); Television01 yourTv = new Television01(11, 20, true); yourTv.print(); } }
package ex04; class Box01 { int width, height, depth; } public class BoxTeat{ public static void main(String[] args) { Box01 b = new Box01(); System.out.println("상자의 크기: (" + b.width + "," + b.height + "," + b.depth + ")"); } }
package ex04; class A{ private int a; int b; public int c; } public class Test { public static void main(String[] args) { A obj = new A(); obj.b = 20; obj.c = 30; } }
package ex04; class Account { private int regNumber; private String name; private int balance; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getBalance() { return balance; } public void setBalance(int balance) { this.balance = balance; } } public class AccountTest { public static void main(String[] args) { Account obj = new Account(); obj.setName("Tom"); obj.setBalance(10000); System.out.println("이름은 " + obj.getName() + " 통장 잔고는 " + obj.getBalance() + "입니다."); } }
package ex04; class SafeArray { private int a[]; public int lenght; public SafeArray(int size) { a = new int[size]; lenght = size; } public int get(int index){ if(index >= 0 && index < lenght){ return a[index]; } return -1; } public void put(int index, int value){ if(index >= 0 && index < lenght){ a[index] = value; } else { System.out.println("잘못된 인덱스 " + index); } } } public class SafeArrayTest{ public static void main(String[] args) { SafeArray array = new SafeArray(3); for (int i = 0; i < array.lenght+1; i++) { array.put(i, i * 10); } } }
Share article