Java

[Java] 생성자 라는 이름이 불러온 오해

Dev_Green 2023. 7. 19. 10:31

생성자란

생성자는 '인스턴스(객체) 초기화 메서드'이다. 

그래서 클래스 내의 메서드의 구조와 유사하다.

다만, 아래의 차이가 있다.

  • 생성자는 반환값이 없다.
  • 그러면서도 메서드 선언부에 void를 사용하지 않는다.

주로 인스턴스 변수 초기화 작업에 사용된다.

 

생성자에 대한 오해

생성자는 보통 '인스턴스를 생성할 때 사용하는 것'이라고도 이르러지기에

'생성자로 인스턴스를 생성할 수 있구나'라고 생각해왔다.

하지만 이는 완벽히 맞는 말은 아니었다!! 

 (두둥탁🥁)

 

서두에서 생성자는 반환값을 가지지 않는다고 했다.

Person person = new Person();

위와 같이 인스턴스를 생성하곤 하는데 반환값이 있어야 변수에 그것을 할당할 것이 아닌가??

이게 어찌된 일..?

 

알고보니 생성자 앞에 달려있는 세 글자를 간과했었던 것이었다.

바로 연산자 new 라는 것.

new 연산자는 인스턴스를 생성할 때 사용하고 Heap이라는 메모리 영역에 각각의 새로운 메모리 공간을 할당해주는 역할을 한다.

 

새로운 인스턴스를 생성하는 과정은 아래와 같다.

  1. 연산자 new에 의해 heap 메모리 영역에 Person 인스턴스가 생성된다.
  2. 생성자에 의해 변수가 초기화된다.
  3. 연산자 new의 결과로 반환된 Person 인스턴스의 주소가 person 변수에 저장된다.

 

정리하자면, 

'생성' 자체는 new 연산자에 의해 수행되고, 생성자에 의해 의도된대로 인스턴스 변수들의 값을 설정하게 된다.

 

이상으로

생성자(Constructor)라는 이름 때문에 인스턴스를 생성한다고 으레 생각했던 부분에 대해 고찰해 보았다.