프로그래밍공부(Programming Study)/자바(JAVA)

(JAVA/자바) 생성자와 초기화

Chaany 2022. 2. 20.
728x90

생성자란 객체 생성 과정에서 new라는 키워드를 통해 호출되는 함수이다.

 

클래스를 작성할 때 멤버변수를 선언하면서 동시에 변수 초기화를 하거나 생성자를 통해 초기화를 해야 한다.

 

클래스 내부에 명시적인 생성자가 없을 시 컴파일 시에 자동으로 default 생성자를 만들어준다.

 

하지만 default 생성자를 오버로딩한 다른 생성자가 존재할 경우에는 default 생성자를 자동으로 만들어 주지 않으므로, 오버로딩한 생성자와 함께 default 생성자를 표기해 주어야 한다.

 

 

생성자의 첫 번째 줄에서는 this와  super라는 키워드 둘 중 하나만 표기 가능하다.

 

this는 static 영역에 있는 클래스(설계도)를 통해 heap 영역에 객체를 생성할 경우 해당 인스턴스의 주소를 갖고 있으며, 해당 인스턴스의 멤버필드 조작할 때 사용한다.

 

super를 공부하기 앞서 객체 생성시에 메모리 내부에서 발생하는 일들을 알고 있어야 한다.

 

Java에서의 최상위 클래스는 java.lang.Object다. 클래스 정의 시 extends Object 상속 선언을 하지 않아도 모든 클래스는 Object를 상속하고 있는 것으로 보고 컴파일 시 extends Object를 한 것으로 컴파일을 한다. 이렇듯 모든 클래스는 부모클래스가 존재한다.

 

객체 생성 및 참조변수 생성과정은 다음과 같다.

 

1. 메모리에서 static 영역에 클래스라는 설계도가 올라가 있어야 한다.

2. 참조변수가 stack 영역에 생성된다.

3. heap영역에 객체가 생성된다.

4. heap에 생성된 객체의 주소를 stack 영역의 참조변수가 참조하게 된다.

 

3번에서 heap 영역 부모 객체를 먼저 생성한 뒤 자식 객체가 생성된다. 자식보다 먼저 생성된 바로 직계 부모 클래스의 주소를 super키워드가 갖게 되며 자식 클래스 생성자의 super 키워드를 통해 부모 객체의 멤버변수들이 초기화된다. 

 

<소소한 꿀팁>
이클립스(eclipse) 기준 alt + shift + s를 누르면 메뉴가 뜨는데 여기서 Generate Constructor ~(하단 두개)를 사용하면 알아서 생성자 만들어주니 참고하자!

728x90

댓글