1일1배움/Java
22/12/23 [객체?]
kim chan jin
2022. 12. 23. 01:41
객체
이미 알고 있는 기본 개념은 생략하고 헷갈리는 개념 위주로 정리해보자.
1. 객체와 인스턴스의 차이
A클래스로부터 만들어진 객체 a를 A클래스의 인스턴스라고 한다.
객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있는 반면,
인스턴스는 어떤 클래스로부터 만들어졌다는 사실을 강조하는 의미를 갖고 있다.
2. 인스턴스의 생성과 사용
class TV {
String color;
boolean power;
int channel;
void power() {power = !power;}
void channelUp() {++channel;}
void channelDown() {--channel;}
}
class TvTest {
public static void main(String args[]) {
Tv t; // Tv 인스턴스를 참조하기 위한 변수 t 선언
t = new Tv(); // Tv 인스턴스 생성
t.channel = 7; // Tv 인스턴스 멤버변수 channel에 7 대입
t.channelDown(); // Tv 인스턴스 메서드 channelDown() 호출
System.out.println("현재 채널은" + t.channel + " 입니다.");
}
}
// 현재 채널은 6 입니다.
Tv 인스턴스의 생성 과정을 자세히 보자.
Tv t; // Tv 인스턴스를 참조하기 위한 참조변수 t 선언
Tv 클래스 타입의 참조변수 t를 선언한다.
메모리에는 참조변수 t를 위한 공간이 마련된다.
아직 인스턴스가 생성되지는 않았으므로 참조변수로 아무것도 할 수 없다.
t = new Tv(); // Tv 인스턴스 생성
연산자 new에 의해 Tv 클래스의 인스턴스가 메모리의 빈공간에 생성된다.
이 때 멤버변수는 각 자료형에 해당하는 기본값으로 초기화된다.
color는 참조형이므로 null로, power는 boolean이므로 false로, channel은 int이므로 0으로 초기화된다.
대입연산자(=)에 의해 생성된 객체의 주소값이 참조변수 t에 저장된다. 이제는 참조변수 t를 통해 Tv 인스턴스에 접근할 수 있다.
t.channel = 7; // Tv 인스턴스 멤버변수 channel에 7 대입
참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다.
t.channelDown(); // Tv 인스턴스 메서드 channelDown() 호출
참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출한다.