Skip to Content
Suffering builds character

6. 생성자

생성자는 클래스를 통해 인스턴스를 생성할 때 사용되는 특별한 메서드(Method) 를 말함

Main.java
Mouse m = new Mouse(); // Mouse() == 생성자
💡
Tip

Constructor, 제작자
Construct, 제작하다, 건설하다

Note

클래스를 통해 인스턴스가 생성될 때 호출되는 인스턴스 생성(초기화) 메서드
여기서 초기화란 인스턴스 변수(멤버 필드들 중에서 인스턴스 필드)들을 초기화하는 것을 의미

생성자도 기본적으로 메서드처럼 동작하나,
일반 메서드와는 다르게 객체(인스턴스)의 생성을 담당하는 특별한 메서드

1. 생성자 (메서드) 작성 규칙

1-1. 생성자의 이름은 클래스명(Mouse)과 동일해야 함

Mouse.java라는 하나의 Mouse 클래스가 있다고 가정할 때,

Main.java
Mouse mickey = new Mouse(); // Mouse.java로 생성하기 때문에 new 'Mouse'

1-2. 생성자는 별도의 반환 값(return)이 없음

💡
Tip

생성자도 메서드이기 때문에 리턴값이 없다는 의미의 void를 사용하는 것이 규칙상 맞지만,
모든 생성자가 리턴값이 없으므로 void를 생략할 수 있도록 한 것

💡
Tip

Eclipse - 생성자 자동 완성 단축키: Alt + Shift + S → In Eclipse, STS, Alt + Shift + S → Generate Constructor ~ 선택 → In IntelliJ, Alt + Insert → Constructor 선택

2. 생성자 (메서드)의 동작 순서

Main.java
Card c = new Card();

new 연산자 에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성됨

생성자 Card()가 호출되어 수행됨(인스턴스 변수 초기화, 여기서는 기본값으로 초기화됨)

연산자 new의 결과로 생성된 Card 인스턴스의 주소(주소 값)가 반환되어 참조변수 c에 저장됨

Card 클래스 타입의 참조변수 c는 받은 주소값을 참조해서 방금 새롭게 생성된 Card 인스턴스를 가리킴

즉, 클래스이름() → Card()가 생성자 메서드라고 볼 수 있음

3. 생성자의 구분

생성자는 크게 매개변수가 있는 생성자와 없는 생성자로 구분할 수 있음

3-1. 매개변수가 없는 생성자 - 기본 생성자(Default Constructor)

모든 클래스(Mouse, Card 등)에는 기본 생성자가 하나씩 자동으로(암묵적, Implicit) 정의되어 있음

자동으로 정의가 되어있다는 것은 Java 컴파일러가 자동으로 작성을 해두었다는 의미

컴파일러가 자동으로 정의해주기 위한 전제조건
→ 클래스 내에 개발자가 직접 작성한 별도의 생성자가 하나도 없을 경우

Mouse.java
class Mouse{ //인스턴스 변수(객체 멤버 변수) int age; String name; // 기본 생성자 // Mouse() { ... }; // 개발자가 직접 작성하지 않을 경우, 컴파일러가 자동으로 생성 public void sing(){ ... } }

3-2. 매개변수가 있는 생성자 - 명시적 생성자(Explicit Constructor)

생성자 역시 메서드처럼 매개변수를 선언하여 호출 시 인자값(Arguments)을 넘겨받아서 인스턴스의 초기화를 진행할 수 있음

→ 개발자가 별도의 매개변수가 있는 생성자를 작성하였을 경우, 컴파일러는 기본 생성자를 별도로 추가해주지 않음

Mouse.java
class Mouse{ // 인스턴스 변수(객체 멤버 변수) int age; String name; // 기본 생성자 // Mouse(){}; // 별도의 생성자가 하나라도 존재하기 때문에 // 컴파일러가 기본 생성자는 자동으로 작성해주지 않음 // 매개변수가 있는 생성자 Mouse(int age, String name) { this.age = age; this.name = name; } public void sing(){ ... } }
Last updated on