본문 바로가기
자바

자바 객체

by 호놀롤루 2022. 2. 16.

1. 개요

자바는 객체지향언어이다. 객체를 이해하기 전에 클래스부터 알아야 하는데,

  • 클래스 : 객체를 정의하고 만들어 사용하기 위한 틀 
  • 객체 : 클래스라는 틀에 찍어서 생선된 실체를 말함, 모든 인스턴스는 객체다.
  • 인스턴스 : 실제로 구현된 객체를 말한다. 같은 틀이지만, 내용물이 다를 수 있고, 클래스가
    같으면 모두 같은 객체다.

호두과자로 예를 들자면 클래스는 호두과자 틀이다. 객체는 호두과자다. 인스턴스는 실제로 구워진
호두과자들이다. 호두과자안에 덜익은 것도 있고, 잘 익은 것, 탄 것이 있다.

 

인스턴스의 관점으로 본다면 덜 익은 것과 탄 것은 다른 것이지만, 객체의 관점에서 본다면

같은 호두과자라는 틀에서 나왔으니, 둘 다 같은 객체인 것이다.

 

객체의 생성 과정을 코드로 구현하면

클래스 변수명 = new 클래스();

와 같은 형태로 객체를 생성할 수 있다.

 

1. new 연산자가 변수에 저장될 메모리를 할당

2. 생성자가 변수에 객체가 들어올 수 있게 초기화

3. new 연산자가 인스턴스의 주소를 변수에 할당

4. 변수를 통해 클래스로 접근 가능

 

지금 변수에는 메모리 상에 있는 인스턴스의 주소가 들어가있고, 이런 변수를 레퍼런스라 부른다.

 

 

2. 레퍼런스

인스턴스를 생성하면, 레퍼런스 변수가 생기지만, 그 인스턴스를 아무도 참조하지 않고, 필요가 없어지면

자바의 GC(Garbage Collector)에 의해 인스턴스는 삭제된다.

 

레퍼런스 변수에 null을 대입하면, 그 인스턴스와 레퍼런스의 연결을 끊게 되고, 아무도 그 인스턴스를 참조하지

않으면, GC에 의해 수거되고, GC는 수거한 데이터를 찾아서 삭제한다.

 

하지만 null값을 대입한다고 인스턴스가 사라지는 건 아니다. 다른 레퍼런스가 인스턴스를 참조하고 있으면, null

을 대입한 레퍼런스와 인스턴스간의 연결만 끊기는 것이다.

 

하지만 인스턴스는 남아있으니, new 클래스(); 로 할당하면 다시 레퍼런스와 인스턴스를 연결할 수 있다.

 

위 코드에서 볼 수 있듯이, 레퍼런스는 인스턴스의 주소를 가지고 있으니, 변수에 대입하면 모두 같은 객체를

바라보고 있다.

 

그리고 a와 같은 인스턴스를 b가 참조하고 있으니, a에 null을 대입해도 인스턴스는 사라지지 않고, 다시
new 연산자로 연결하니 같은 인스턴스와  연결되었다.

 

자바를 공부함에 있어서 객체의 개념은 정말 중요하니 이해하고 넘어가야 편하다.

댓글