IT/JAVA

Java Section 09 : 생성자

_KH_ 2025. 1. 16. 10:07

01 생성자의 특징

■ 생성자 : 객체를 생성할 때 호출되어 객체의 초기화를 담당하는 특별한 메서드

- 객체를 생성하고 초기화하려면 반드시 생성자를 호출해야 함.

- 생성자를 통해 객체를 초기화 한다는 것은 필드와 메서드를 호출하는 등 객체를 사용하기 위해 객체를 메모리에 올린다는 것이다.

- 생성자 역시 매개변수를 통해 값을 전달할 수 있다.

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

}

- 일반 메서드와 달리 반환 타입이 없고 이름은 클래스 이름과 동일

 

□ 호출 위치 : 객체의 초기화를 담당하기 때문에 객체를 생성할 때만 호출 가능

□ 호출 방법 : new 키워드를 함께 사용

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

생성자를 통해 객체를 생성하는 방법은 다음과 같다.

 

■ 기본 생성자 : 생성자를 직접 선언하지 않으면 자바 컴파일러가 기본 생성자를 자동으로 제공해줌. 보통 생략되어 있음

- 자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 함.

- 개발자가 직접 생성자를 선언하면, 기본 생성자는 제공해주지 않는다.

 

※ 생성자가 아니라, 클래스에서 필드를 선언하면서 멤버변수를 초기화해줄 수도 있지만, 객체의 값이 모두 달라야한다면 생성자를 통해 값을 전달하고 객체를 생성하는 것이 더 효율적이다.

 

02 생성자 오버로딩

■ 생성자 오버로딩 : 생성자를 여러 개 선언하는 것. 매개변수를 다르게 해서 다양한 상태로 생성자를 선언할 수 있다.

- 다양한 객체 생성 가능

- 생성자 매개변수의 자료형, 개수, 순서로 생성자를 구분하여 선언할 수 있음

- 매개변수의 개수가 같을 때도, 매개변수의 자료형을 달리하여 오버로딩 구현 가능

public class Book {
	Book(String title, int page) { ... } ;
    Book(String title, int series) { ... };

이 경우에는 오버로딩 불가능함.

 

03 this와 this()

1. this : "자기 자신 객체". 객체 자기 자신을 스스로 참조하는 데 사용하는 변수

- 변수를 최대한 구체적이고 명확하게 가리키기 위해 사용, 필드의 이름과 같은 매개변수를 사용할 경우 다음과 같은 상황 발생

Student(String name, int age, int studentID) {
	name = name;
    age = age;
    studentID = studentID;
    }

중괄호 안에서 사용하기 위해 선언된 지역변수가 클래스 필드보다 우선순위가 높아서, 대입 연산자를 기준으로 왼쪽/오른쪽 변수 모두 매개변수를 뜻하게 된다.

즉, 매개변수에 매개변수를 넣는 의미 없는 코드가 되는 것.

 

이를 방지하기 위해 매개변수와 필드를 구분하는 this 키워드를 사용하는 것이다.

 

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

 

※ this()를 사용하지 않을 경우

...

Phone(String brand, int series) {
	this.brand = brand;
    this.series = series;
}

Phone(String brand, int series, String color) {
	this.brand = brand;
    this.series = series;
    this.color = color;
}
...

중복되는 코드가 있음

 

※ this()를 사용할 경우

...

Phone(String brand, int series) {
	this.brand = brand;
    this.series = series;
}

Phone(String brand, int series, String color) {
	this(brand, series);
    this.color = color;
}
...

중복되는 코드를 줄일 수 있다.

 

다만 매개변수가 가장 많은 생성자를 먼저 만들어놓고 그걸 가져다 쓰는 편이 좋음!