생성자
- 김영한님의 실전 자바 강의 중 생성자 챕터를 학습하며 객체 생성 시 초기화 작업을 수행하는 생성자의 개념과 활용법을 정리함
- 생성자가 필요한 근본적인 이유와
this,this()키워드의 차이점을 분석함
</br></br>
생성자가 필요한 이유
- 객체를 생성한 직후에 멤버 변수의 초기값을 설정하는 작업은 빈번하게 발생함
초기화 작업의 반복
- 생성자가 없다면 객체를 생성한 후 매번 별도의 초기화 메서드를 호출하거나 직접 변수에 값을 대입해야 함
- 초기화 코드가 중복되어 작성될 가능성이 높음
- 개발자가 실수로 초기화 메서드 호출을 누락할 경우 값이 비어있는 불완전한 객체가 생성될 위험이 있음
생성자의 도입
- 객체 생성 시점에 즉시 필요한 기능을 수행하도록 보장함
- 객체를 생성하는
new명령어 단계에서 초기화 로직을 포함하여 실수를 원천 차단함
</br></br>
this 키워드
- 인스턴스 자기 자신의 참조값을 가리키는 키워드임
멤버 변수와 매개변수의 구분
- 메서드나 생성자의 매개변수 이름이 멤버 변수와 동일할 때 구분을 위해 사용함
- 자바 변수 호출 우선순위
- 코드 블록 내부의 지역 변수나 매개변수가 가장 높은 우선순위를 가짐
- 이름이 겹치면 멤버 변수보다 매개변수가 먼저 선택됨
- 멤버 변수에 접근할 때
this.을 붙여서 인스턴스 변수임을 명시함
1
2
3
4
5
6
7
8
9
public class Product {
String name;
int price;
void initProduct(String name, int price) {
this.name = name; // this.name은 멤버 변수, name은 매개변수
this.price = price;
}
}
this를 생략할 수 있는 경우- 이름이 중복되지 않는다면
this를 생략해도 멤버 변수에 자동으로 접근함 - 최근에는 IDE가 색상으로 변수를 구분해주므로 이름이 겹치는 경우에만 주로 사용함
- 이름이 중복되지 않는다면
</br></br>
생성자의 특징과 문법
- 생성자는 객체 생성 직후 호출되는 특별한 메서드임
문법 규칙
- 이름이 클래스 이름과 완전히 동일해야 함
- 반환 타입이 존재하지 않으며
void도 적지 않음 - 대문자로 시작하는 클래스 명명 규칙을 그대로 따름
동작 방식
new키워드를 사용하여 인스턴스를 생성할 때 마지막의 괄호()가 생성자 호출을 의미함- 생성자 호출 시 인수를 전달하여 객체 내부 데이터를 즉시 채움

</br></br>
기본 생성자
- 매개변수가 없는 생성자를 의미함
자동 생성 조건
- 클래스 내부에 개발자가 정의한 생성자가 하나도 없을 때만 컴파일러가 자동으로 생성함
- 생성자가 하나라도 정의되어 있다면 컴파일러는 기본 생성자를 만들지 않음
제약 사항
- 생성자를 직접 정의한 경우 반드시 해당 생성자의 매개변수 규칙을 지켜서 호출해야 함
- 기본 생성자 없이 유인자 생성자만 존재할 때 빈 괄호로 객체를 생성하면 컴파일 오류가 발생함
- 이는 필수 데이터 입력을 강제하여 프로그램의 안정성을 확보하는 장치가 됨
</br></br>
생성자 오버로딩과 this()
- 생성자도 메서드와 마찬가지로 매개변수를 다르게 하여 여러 개를 정의할 수 있음
코드 중복의 문제
- 여러 생성자가 비슷한 초기화 로직을 가질 경우 코드가 중복됨
- 중복된 코드는 수정이 필요할 때 모든 생성자를 찾아 고쳐야 하는 번거로움이 있음
this() 기능
- 생성자 내부에서 자기 자신의 다른 생성자를 호출할 때 사용함
-
중복되는 로직을 하나의 주 생성자에 몰아넣고 다른 생성자들이 이를 호출하게 설계함

호출 규칙
this()는 반드시 생성자 코드의 첫 번째 줄에 위치해야 함- 첫 줄이 아닌 곳에서 호출하거나 로직 실행 후 호출하면 컴파일 오류가 발생함
</br></br>
연습 문제
-
생성자를 사용하는 주된 목적은 무엇일까요?
a. 객체가 생성될 때 초기화 작업을 수행하기 위해
-
생성자는 객체가 메모리에 생성될 때 자동으로 호출되어 속성값 설정과 초기화 작업을 수행함
-
이를 통해 객체가 사용 가능한 올바른 상태로 만들어지도록 보장하는 것이 주된 목적임
-
-
생성자의 문법적 특징은 무엇일까요?
a. 클래스 이름과 동일하다
- 생성자는 객체가 생성될 때 자동으로 호출되며 반환 타입이 없고 클래스 이름과 정확히 일치해야 하는 특별한 메서드임
-
자바 컴파일러가 클래스에 기본 생성자를 자동으로 추가해주지 않는 경우는 언제일까요
a. 다른 생성자가 하나라도 정의된 경우
-
클래스에 개발자가 정의한 생성자가 하나라도 있으면 자바는 자동으로 기본 생성자를 만들어주지 않음
-
이때 기본 생성자 호출 시 컴파일 오류가 남
-
-
객체 지향 프로그래밍에서
this키워드의 주된 용도는 무엇일까요?a. 현재 객체의 멤버 변수 및 메서드 지칭
-
this는 현재 코드가 실행되고 있는 자기 자신의 객체 인스턴스를 가리킴 -
특히 멤버 변수와 이름이 같은 지역 및 매개변수와 구분할 때 유용함
-
-
생성자에서
this()를 사용하는 가장 큰 이유는 무엇일까요?a. 생성자 간 코드 중복 줄이기
- 생성자들이 공통된 초기화 로직을 가질 때
this()를 사용하여 다른 생성자를 호출함으로써 코드 중복을 효율적으로 제거할 수 있음
- 생성자들이 공통된 초기화 로직을 가질 때
</br></br>
요약 정리
- 생성자는 객체 생성 시점에 멤버 변수를 초기화하고 필수 로직을 실행함
this는 인스턴스 자신을 가리키며 매개변수와 멤버 변수를 구분함- 생성자가 하나라도 정의되면 기본 생성자는 자동 생성되지 않음
this()를 사용하여 생성자 간 중복을 제거하고 첫 줄 호출 규칙을 준수해야 함
</br></br>