생성자(Constructor) / java

생성자

  • 인스턴스 생성 과정에서 초기화를 위해 자동으로 호출되는 일종의 메소드

생성자와 메소드의 차이

  • 생성자의 이름은 클래스의 이름과 동일해야 한다.
  • 생성자는 값을 반환하지 않고 반환형도 표시하지 않는다.
  • 인스턴스 생성 시 자동으로 호출되어 인스턴스를 초기화
// 인스턴스의 초기화를 위한 메소드, 인스턴스 생성 시 반드시 한번 호출해서 초기화를 진행해야 한다.
public void initAccount(String acc, String ss, int bal) {
	accNumber = acc;
	ssNumber = ss;
	balance = bal;
}

// 위의 메소드를 클래스 BankAccount의 생성자로 수정
public BankAccount(String acc, String ss, int bal) {
	accNumber = acc;
	ssNumber = ss;
	balance = bal;
}

BankAccount yoon = new BankAccount(“12-34-89”, “90990-9090990”, 10000);
  • 소괄호 안에 값을 전달하고 이 값들은 생성자가 호출될 때 생성자의 매개변수로 전달
  • ‘인스턴스 생성 마지막 단계’에서 다음의 생성자가 호출되면서 값들이 전달되고 이 값들로 인스턴스 변수가 초기화 된다.
public BankAccount(String acc, String ss, int bal) {	// 생성자
		accNumber = acc;	// 변수 accNumber 초기화
		ssNumber = ss;		// 변수 ssNumber 초기화
		balance = bal;		// 변수 balance 초기화
	}
  • 인스턴스 생성의 마지막 단계는 생성자 호출이다.
  • 어떠한 이유로든 생성자 호출이 생략된 인스턴스는 인스턴스가 아니다.

디폴트 생성자(Default Constructor)

  • 생성자를 생략한 상태의 클래스를 정의하면 자바 컴파일러가 ‘디폴트 생성자’라는 것을 클래스의 정의에 넣어준다.
class BankAccount {
	int balance;

	public BankAccount() {	// 컴파일러에 의해 자동 삽입되는 ‘디폴트 생성자’
		// empty
	}
	public int deposit(int amount) { … }
	public int withdraw(int amount) { … }
	public int checkMyBalance() { … }
}
  • 디폴트 생성자는 인자를 전달받지 않는 형태로 정의되어 삽입
  • 내부적으로 하는 일이 없지만 인스턴스의 생성 규칙인 ‘생성자의 호출’은 유지가 된다.
  • 컴파일러에 의해서 디폴트 생성자가 삽입이 되더라도 생성자는 직접 정의해 주는 것이 좋다.

좋은 웹페이지 즐겨찾기