class Time{
int hour;
int minute;
int second;
}
Time t = new Time();
t.hour = 12; // == int hour = 12;
t.minute = 34; // == int minute = 34;
t.second =56; // == int second = 56;
서로 연관된 값을 따로따로 변수에 저장하는것이 아닌 class에 연관된 데이터를 저장하고
객체를 생성해서 데이터를 입력하고 사용하는것이 객체지향적인 프로그래밍이다.
//TV 설계도
class TV{
String color; // 색깔 속성
boolean power; // 전원상태 속성
int channel; //채널 속성
void power() {// 전원 켜기,끄기 기능
power = !power;
}
void channelUp() {//채널 변경하기 기능
channel++;
}
void channelDown() {
channel--;
}
}
색깔, 전원상태, 채널이라는 속성과 전원켜기,끄기,채널 변경하기 기능을 가진 TV라는 제품을 만들기 위한 TV설계도
TV t; // TV라는 설계도로 생성할 TV제품을 참조하기 위한 참조변수(리모컨)선언
t = new TV(); //참조변수(리모컨)에 만든 TV제품을 저장
TV t1 = new TV(); // 생성한 TV를 t1이라는 리모컨으로 사용하겠다
TV t2= new TV(); // 생성한 TV를 t2라는 리모컨으로 사용하겠다
t1.channel = 7; //t1이라는 리모컨으로 연결된 TV의 채널을 변경한다.
System.out.println("t1 의 channel 값 : " + t1.channel); //t1 의 channel 값 : 7
System.out.println("t2 의 channel 값 : " + t2.channel); //t2 의 channel 값 : 0
똑같은 channel이라는 변수명을 가지지만 각각 다른 리모컨과 연결되있기 때문에 서로다른 변수이다.
TV t1 = new TV();
TV t2= new TV();
t1 = t2; // t2에 연결된 TV를 t1리모컨과 연결한다.
t1.channel = 7; //t1의 리모컨으로 t1의 채널을 변경한다.
System.out.println("t1 의 channel 값 : " + t1.channel); //t1 의 channel 값 : 7
System.out.println("t2 의 channel 값 : " + t2.channel); //t2 의 channel 값 : 7
t1,t2라는 2개의 리모컨으로 한개의 TV와 연결하여 사용 가능하다.
이때 원래 t2에 저장돼있던 객체는 사용불가 상태가 되어 가비지컬렉션(GC)에 의해 메모리에서 삭제되어 사용불가하다
// 객체를 생성해 각각의 참조변수에 저장
TV t1 = new TV();
TV t2 = new TV();
TV t3 = new TV();
TV[] tvArr = new TV[3]; // TV타입의 길이가 3인 배열 생성
//tvArr배열 각 인덱스에 참조변수를 저장하면 참조변수배열이 된다.
tvArr[0] = t1;
tvArr[1] = t2;
tvArr[2] = t3;
즉, 참조변수에 객체가 저장되있으므로 참조변수배열 == 객체배열이다