클래스 객체 인스턴스
1. 클래스
1-1. 클래스란?
객체를 만드든 데에 사용되는 것으로, 생성될 객체의 속성과 기능을 포함하고 있다.
또한 여러 타입의 서로 관련된 변수를 묶어 하나의 타입으로 정의하는 것을 '사용자 정의 타입'이라고 하는데
자바에서는 클래스가 바로 사용자 정의 타입이라고 볼 수 있다.
1-2. 속성
'멤버 변수' 즉 변수로 표현되는 구성 요소로 객체가 저장해야 할 데이터의 저장 공간을 확보한다.
ex ) Tv 라는 클래스에는 크기, 길이, 높이 등이 멤버 변수로 작성될 수 있다.
1-3. 기능
'메서드'라고 하며, 객체가 어떠한 기능을 수행하는지에 대한 내용이 작성된다.
ex ) Tv 클래스에는 전원을 켜고 끄는 기능이 작성될 수 있다.
class Tv {
// 멤버변수
String color;
boolean power;
int channel;
// 메서드
void power() {
power = !power;
}
void channelUp() {
channel++;
}
void channelDown() {
channel--;
}
}
2. 객체
클래스로부터 객체를 만드는 과정을 인스턴스화라고 하며, 이 과정으로부터 만들어진 결과를 인스턴스라고 한다.
// 클래스의 인스턴스화
{
클래스타입 참조변수 = new연산자 클래스타입();
( 객체 ) (생성자 호출)
}
3. 인스턴스
인스턴스는 객체와 혼용되며, 참조 변수를 선언을 통하여 사용할 수 있다.
// 객체를 참조하기 위한 참조변수 선언
클래스명(타입) 참조변수명(객체);
// 생성자를 통해 생성된 객체(인스턴스)의 주소값을 대입 연산자를 통해 참조변수에 저장
참조변수명 = (new 클래스명();(생성자))(인스턴스)
데이터의 값을 클래스 내부에서 생성자를 통해 별도로 초기화 하지 않았다면,
인스턴스는 각 멤버변수 자료형에 해당하는 기본값으로 초기화한다.
또한 그 값은 힙 영역에 생성된 객체에 저장된다.
단, 메서드는 메서드 영역에 저장된다.
(객체마다 멤버변수는 다를 수 있어도 메서드의 기능적인 면은 같기 때문에,
객체가 생성될 때마다 함께 생성하는 것은 메모리에 부담을 줄 수 있다.)
참조 변수에는 new 연산자에 의해 힙 영역에 생성된 객체의 주소값이 저장된다.
// 각각 new 연산자를 통해 생성된 객체의 주소값을 저장하고 있기 때문에
// t1과 t2는 서로 다른 주소를 저장하고 있다.
Tv t1 = new Tv();
Tv t2 = new Tv();
// t2 참조 변수에 t1이 저장하고 있는 주소값을 복사한다.
// 똑같은 주소를 가지고 있기 때문에 주소에 해당하는 객체도 같다.
t2 = t1;
이때 t2에 저장되어 있던 객체의 주소를 바라보고 있지 않는다면 GC에 의해 해당 객체는 메모리에서 사라지게 된다.
하나의 참조 변수는 하나의 객체 주소만을 저장할 수 있으며,
객체는 여러 참조 변수의 참조를 받을 수 있다.