- 인스턴스의 생성과 사용
클래스명 변수명; // 클래스의 객체를 잠조하기 위한 참조변수를 선언
변수명 = new 클래스명; // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; // Tv클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
- TvTest.java
이 예제는 Tv클래스로부터 인스턴스를 생성하고 인스턴스의 속성(channel)과 메서드(cannelDown())를 사용하는 방법을 보여준다.
public class TvTest {
public static void main(String[] args) {
Tv t; // Tv인스턴스를 참조하기 위한 변수
t = new Tv(); // Tv인스턴스를 생성한다.
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
class Tv {
// Tv의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int channel; // 채널
// Tv의 기능(메서드)
void power() {power = !power;} // TV를 켜거나 끄는 기능을 하는 메서드
void channelUp() { ++channel;} // TV의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel;} // TV의 채널을 낮추는 기능을 하는 메서드
}
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
- TvTest2.java
public class TvTest2 {
public static void main(String[] args) {
Tv t1 = new Tv();
Tv t2 = new Tv();
System.out.println("t1의 channel 값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel 값은 " + t2.channel + "입니다.");
t1.channel = 7;
System.out.println("t1의 채널값을 7로 변경하였습니다.");
t2 = t1; // t1의 주소를 t2에 저장
t2.channel = 10;
System.out.println("t1의 channel 값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel 값은 " + t2.channel + "입니다.");
}
}
참조변수에는 하나의 값(주소)만이 저장될 수 있으므로 둘 이상의 참조변수가 하나의 인스턴스를 가리키는 것은 가능하지만 하나의 참조변수로 여러 개의 인스턴스를 가리키는 것은 불가하다.
참고문헌 : 남궁성(2016), Java의 정석, 도우출판