[JAVA] 생성자(Constructor)와 초기화

2024. 2. 19. 22:55언어(Language)/JAVA

생성자(Constructor)란?

생성자(Constructor)는 객체가 생성될 때 자동으로 호출되는 특수 목적의 멤버함수(메소드)로 객체의 초기화를 위해 사용된다.


생성자(Constructor)의 특징

  • 생성자(Constructor)의 이름은 클래스 이름과 동일해야 한다.
  • 생성자(Constructor)는 다른 멤버함수(메소드)와는 다르게 리턴 타입이 없다.
  • 생성자(Constructor)는 객체가 생성될 때 자동으로 한 번 호출된다.
  • 생성자(Constructor)는 매개변수 조건에 따라 여러 개를 작성할 수 있다.(오버로딩)
  • 생성자(Constructor)는 클래스에 최소 1개는 있어야 하며, 생성자 코드가 없을 경우 컴파일러가 기본 생성자를 자동으로 생성한다.
    주의할 점은 생성자 코드가 1개라도 작성되어 있다면, 컴파일러는 기본 생성자가 없다고 하더라도 기본 생성자를 자동으로 생성하지 않는다.

생성자(Constructor) 사용법

생성자 선언 방법

public 클래스(매개변수) {
	...
}

 

생성자를 선언하는 방법은 다음과 같다. 클래스 부분은 생성자를 정의하는 클래스의 이름과 동일하게 적어주어야 한다.

매개변수는 선택적으로 적어주면 된다.

예시를 통해 자세히 알아보자.

 

 

예제1) 클래스에 기본 생성자와 매개변수를 가진 생성자를 정의했을 경우

 

1) Book 클래스 정의

public class Book {
    String title;
    int price;
    
    public Book() {} //기본 생성자
    
    public Book(String title, int price) { //매개변수를 가진 생성자
        this.title = title;
        this.price = price;
    }
    
    public void showPrice() {
        System.out.println(title + "의 가격은 " + price + "원입니다");
    }
}

 

 

2) Book 객체 생성 및 사용

public class HelloWorld {
    public static void main(String[] args) {
        Book b1 = new Book(); //객체생성 : 기본 생성자 호출됨
        Book b2 = new Book("국어책", 3000); //객체생성 : 매개변수를 가진 생성자 호출됨
        
        b1.showPrice();
        b2.showPrice();
    }
}

 

 

3) 실행결과

 

 

예제2) 클래스에 기본 생성자 없이 매개변수를 가진 생성자만 정의했을 경우

 

1) Book 클래스 정의

public class Book {
    String title;
    int price;
    
    public Book(String title, int price) { //매개변수를 가진 생성자
        this.title = title;
        this.price = price;
    }
    
    public void showPrice() {
        System.out.println(title + "의 가격은 " + price + "원입니다");
    }
}

 

 

2) Book 객체 생성 및 사용

public class HelloWorld {
    public static void main(String[] args) {
        Book b1 = new Book(); //Error 발생(기본생성자 자동생성 안됨)
        Book b2 = new Book("국어책", 3000); //객체생성 : 매개변수를 가진 생성자 호출됨
        
        b1.showPrice();
        b2.showPrice();
    }
}

 

 

3) 실행 결과

 

클래스 정의시 아무런 생성자 정의가 없으면 컴파일러가 기본 생성자에 한해 자동생성 해주지만 생성자 정의가 1개라도 되어 있다면 컴파일러는 기본 생성자를 자동 생성해주지 않는다.

따라서 기본 생성자가 없기 때문에 아래와 같이 기본 생성자가 호출되는 객체를 생성하려고 하면 에러가 발생한다.

Book b1 = new Book();