[JAVA] 생성자(Constructor)

Lee GaEun·2025년 7월 8일

Java Note

목록 보기
3/3

1. 생성자(Constructor)

  • 객체를 생성하는 역할을 하는 클래스의 구성 요소
  • 객체 생성 시, new 키워드를 통해 생성자를 호출하여 인스턴스를 초기화하는데 사용하는 특수한 메서드

생성자의 조건

  • 생성자의 이름은 반드시 클래스의 이름과 같아야 함
  • 생성자는 리턴 타입이 없음, void 키워드를 사용하지 않음
  • 클래스에는 반드시 생성자가 1개 이상 있어야 함
    • 생성자 코드가 없는 경우, 컴파일러가 기본 생성자를 자동 생성함
    • 생성자 코드가 있는 경우, 컴파일러가 기본 생성자를 자동 생성하지 않음
  • 예시 :
public class Book {
	String title;
	int price;
		
	public Book() {	}                   // 기본생성자
	
	public Book(String title, int price) {    // 매개변수를 가진 생성자
		this.title = title;
		this.price = price;
	}
}
  • 생성자 호출 예시 :
public class HelloWorld {
	public static void main(String[] args) {
		// 객체생성 - 기본생성자 호출됨
		Book b1 = new Book();          
        
        // 객체생성 - 매개변수를 가진 생성자 호출됨
		Book b2 = new Book("국어책", 3000);   
	}
}
  • 위 예시와 같이 생성자 오버로딩을 통해 하나의 클래스 안에 여러 개의 생성자를 작성할 수 있음

2. 생성자의 종류

기본 생성자(Default Constructor)

public Book() {	}  // Book 클래스의 기본 생성자
  • 매개변수가 없는 생성자를 의미
  • 클래스 안에 생성자가 없는 경우, 자바 컴파일러가 기본 생성자를 자동으로 추가함
  • 특정 생성자가 작성되어 있는 경우, 작성된 생성자를 기본으로 사용하여 자바 컴파일러가 기본 생성자를 자동으로 추가하지 않음
    • 이러한 경우, 기본 생성자를 코딩해놓지 않았다면 에러가 발생함

매개변수가 있는 생성자

// Book 클래스의 title과 price를 매개변수로 갖는 생성자
public Book(String title, int price) {
		this.title = title;
		this.price = price;
	}
  • 매개변수가 있는 생성자는 매개변수를 통해 호출해야 함
    • Book b2 = new Book("국어책", 3000);
    • 호출 시 해당 값을 받아 인스턴스를 초기화 함
  • 원하는 값으로 초기화 했기 때문에, 따로 필드 값을 초기화 하지 않아도 됨

3. this() 메서드

  • 같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용
  • this()는 생성자 코드에서만 사용하는 메서드
  • 주로 코드의 중복 제거를 위해 사용
  • 예시 :
public class Book {
    private String title;
    private int price;
 
    public Book(String title, int price) {
        this.title = title;
        this.price = price;
    }
 
    public Book(String title) {
        this(title, 0);
    }
}
  • this() 메서드에 인수를 전달하면 생성자 중 메서드의 원형에 명시되는 매개변수 리스트를 갖는 생성자 메서드를 호출함
  • title 정보만을 가지고 생성자를 호출하면 this(title, 0);를 통해 price를 0으로 초기화 후 Book(String title, int price) 메서드에 전달하여 title과 price 모두 초기화 가능하다는 부분이 장점
  • 이때, 한 생성자가 다른 생성자를 호출할 때는 반드시 해당 생성자의 첫 줄에서만 호출할 수 있다는 점을 주의
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글