생성자

2025. 2. 20. 16:15Java/객체지향

1. 생성자란?

  • 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
  • 생성자의 조건
    • 생성자의 이름은 클래스의 이름과 같아야한다.
    • 생성자는 리턴 값이 없다.
  • Card c = new Card();
    • 연산자 new에 의해 메모리에 Card 클래스의 인스턴스가 생성된다
    • 생성자 Card()가 호출되어 수행된다
    • 연산자 new의 결과로 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
  • 생성자 사용 목적
    • 인스턴스 생성 시점에 수행할 명령이 있을 경우
    • 매개변수 있는 생성자의 경우 매개변수로 전달 받은 값으로 필드 초기화 할 경우
    • 작성한 생성자 외에는 인스턴스를 생성하는 방법을 제공하지 않고 싶을 경우 (인스턴스 생성 방법 제한, 초기값 전달 강제화)

2. 생성자 종류

1) 기본 생성자

  • 매개변수가 없는 생성자로 컴파일러가 제공하는 기본 생성자이다. 
  • 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때다. 

2) 매개변수 있는 생성자 

  • 생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스 초기화 작업에 사용 가능
  • 매개변수가 있는 생성자를 사용하면 인스턴스를 생성하는 동시에 원하는 값으로 초기화 가능
  • 코드가 보다 간결하고 직관적이 됨
public class User {
    //필드 선언부
    private String id;
    private String pwd;
    private String name;
    private Date enrollDate;

    //1. 기본 생성자
    public User(){}

    //2. 매개변수 생성자
    //초기화할 필드가 여러 개 일 경우
    //초기화하고 싶은 필드의 조합별로 생성자를 여러개 작성할 수 있다.

    //id, pwd 초기화 생성자
    public User(String id, String pwd){
        this.id = id;
        this.pwd = pwd;
        System.out.println("User id, pwd 초기화 생성자 동작");
    }

    //id, pwd, name, date 초기화 생성자
    public User(String id, String pwd, String name,  Date enrollDate){
        this(id, pwd); //동일 클래스 내의 다른 생성자를 호출, 리턴되지만 리턴값은 없음, 반드시 첫줄에!
        this.name = name;
        this.enrollDate = enrollDate;
        System.out.println("User id, pwd, name, date 초기화 생성자 동작");
    }
}

 

3. 생성자에서 다른 생성자 호출하기 - this

  • 동일 클래스 내의 다른 생성자 호출, 생성자 이름 대신 this를 사용한다.
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
  • 리턴되지만 리턴 값은 없음 
  • this 예약어 
    • this: 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어있다.
    • this(), this(매개변수): 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.

4. 생성자를 이용한 인스턴스의 복사

  • 생성자를 이용하여 인스턴스를 복사할 수 있다 (복사 생성자)
  • 인스턴스를 생성할 때 결정할 2가지
    • 클래스 - 어떤 클래스의 인스턴스를 생성할 것인가?
    • 생성자 - 선택한 클래스의 어떤 생성자로 인스턴스를 생성할 것인가?