BOOK

[JAVA] MENTOR JAVA SECTION 9

Minch13r 2025. 1. 16. 21:50

생성자

생성자는 클래스를 구성하는 구성요소 중 하나이다. 객체를 생성할 때 호출되어 객체의 초기화를 담당하는 특별한 메서드이다. 객체를 생성하고 초기화하기 위해서는 반드시 생성자를 호출해야 한다. 따라서, 객체를 생성해야 하는 라이브러리용 클래스는 모두 생성자를 가지고 있다. 생성자는 일반 메서드와 달리 반환 타입이 없으며, 메서드 이름은 클래스 이름과 동일하다.

클래스명(매개변수1, 매개변수2...){
	
 }

 

일반 메서드들과는 다르게, 생성자는 호출할 수 있는 곳이 정해져 있다. 생성자는 클래스를 기반으로 객체를 생성할 때, 객체의 초기화를 담당하는 역할을 하므로 객체를 생성할 때만 호출할 수 있다. 생성자를 호출할 때는 new 키워드를 사용한다.

클래스명 객체명 = new 클래스명();

 

자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다. 클래스를 생성하면서 개발자가 직접 생성자를 선언하지 않았지만, 자바 컴파일러가 기본 생성자를 자동으로 제공해 준다. 다만, 컴파일러의 눈에만 보일 뿐 우리가 보는 코드에는 생략되어 있다.

 

우리가 직접 생성자를 선언하지 않으면, 컴파일러가 자동으로 생성자를 추가해서 객체 생성에 활용한다. 이를 '기본 생성자'라고 한다.

클래스명(){

}

 

기본 생성자는 매개변수가 별도로 없으며, 중괄호{} 블록 안에도 코드가 없는 비어있는 생성자를 말한다. 기본 생성자는 개발자가 직접 생성자를 선언하지 않았을 때만 컴파일러가 자동으로 추가한다. 만약 개발자가 직접 생성자를 선언한다면, 컴파일러는 선언된 생성자를 사용할 것이다.

 

생성자는 객체를 생성함과 동시에 객체를 초기화할 수 있다. 생성자를 통해 객체를 초기화한다는 것은 필드와 메서드를 호출하는 등 객체를 사용하기 위해 객체를 메모리에 올린다는 의미가 있다.

 

생성자를 통해서 객체를 메모리에 올림과 동시에, 더 나아가 객체 멤버에 접근이 가능하므로 일반 메서드처럼 객체 멤버의 데이터를 초기화할 수 있다. 이러한 이유로 직접 생성자를 선언해 사용한다. 메서드를 호출하면서 매개변수를 통해 값을 전달했던 것처럼, 생성자 역시 매개변수를 통해 값을 전달할 수 있다.

 

생성자를 통하지 않고 클래스에서 필드를 선언할 때 필드를 초기화할 수 있다.

public class Snack {
	int price = 2000;
    ...
}

 

위와 같은 클래스로 객체를 만들 경우 모든 과자의 가격이 2,000원으로 생성된다. 과자의 가격이 모두 2,000원으로 동일하다면 효과적인 방법일 수 있다. 하지만 과자마다 가격이 다르다면 생성자를 통해 가격을 전달하고 객체를 생성하는 것이 조금 더 효율적일 수 있다. 아래와 같이 선언하면 다른 값을 가질 수 있다.

Snack potatochip = new Snack(2000);
Snack chocolate = new Snack(1800);

생성자 오버로딩

외부에서 전달하는 값을 이용하지 않고, 내부에서 선언된 필드의 기본값을 그대로 사용하고 싶다면, 매개변수가 부족하다고 객체를 생성하지 못할 이유가 없다. 이러한 경우를 해결하기 위해, 자바는 생성자를 여러 개 선언하는 것을 허용하고 있다. 상황에 따라 매개변수 없이 또는 1개, 2개 등 외부에서 제공할 수 있는 데이터만큼만 매개변수로 전달하여 객체를 생성할 수 있게 하는 방법이다. 이렇게 생성자를 다양한 형태로 선언하는 것을 '생성자 오버로딩(Constructor Overloading)'이라고 한다.


this

this 참조 변수는 인스턴스가 바로 자기 자신을 참조하는 데 사용하는 변수다. this를 필드에 붙여서 사용하면, 중괄호 {} 안에서도 같은 이름의 매개변수와 필드를 구분해서 사용할 수 있는데 this의 사용 방법은 다음과 같다.

this.필드 = 매개변수명;

 

this() 메서드는 같은 클래스 안에 있는 생성자 중 매개변수의 개수, 자료형, 순서에 맞는 다른 생성자를 호출하는 메서드로 생성자 내부에서만 사용할 수 있다.

'BOOK' 카테고리의 다른 글

[JAVA] MENTOR JAVA SECTION 11  (2) 2025.01.18
[JAVA] MENTOR JAVA SECTION 10  (2) 2025.01.17
[JAVA] MENTOR JAVA SECTION 8  (2) 2025.01.15
[JAVA] MENTOR JAVA SECTION 7  (0) 2025.01.14
[JAVA] MENTOR JAVA SECTION 6  (1) 2025.01.07