본문 바로가기
공부/java

자바(java)의 생성자 함수

by 샤샤샤샤 2023. 1. 23.

생성자 함수 (Constructor) :  객체 생성시 자동으로 호출되는 함수

형식

public 클래스이름() { }  - 다른 함수들과 달리 int나 String처럼 반환형식 지정을 안함.

//클래스에서 중요한 개념들
//1.상속 : 모듈화/계층화, 중복제거
//2.생성자함수 : 객체생성시 자동으로 호출되는 함수
//3.다형성 : 상속관계에서 하나의 객체가 여러 타입을 가질수 있다.
//        : B클래스가 A클래스를 상속했다면, 타입을 B타입,A타입
//          2개 다 타입으로 가질 수 있다.
//4.추상화 클래스 : 일반 클래스(일반 함수) + 가상함수
//5.인터페이스 : 인터페이스 타입에 가상함수만 있는 것

//생성자 함수 : Constructor
//           : 객체생성시(new) 자동으로 호출되는 함수
//  용도 : 값을 초기화 할때 사용.
class Book {
    int price = 1000;
    void read(){
        System.out.println("책을 읽는다.");
    }
    //생성자 함수 형식
    //public 반환형표시없음 클래스이름()
    public Book(){
        System.out.println("생성자함수 호출됨.");
        this.price = 2000;      // 생성자 함수를 통해 클래스 변수(속성) 수정
    }
}
public class ex81 {
    public static void main(String[] args) {
        Book objBook = new Book();
        System.out.println( objBook.price );
    }
}

생성자 함수를 만들때 매개 변수를 따로 받을수도 있다. 이를 통해 인스턴스의 값을 할당할수도 있다.

class Robot{
    String color = "빨강";
    //기본 생성자함수(매개변수 없음)
    public Robot(){
        System.out.println("기본 생성자함수");
    }
    //매개변수가 있는 생성자 함수
    public Robot(String color){
        this.color = color;
        System.out.println("매개변수가 있는 생성자함수");
    }
}
public class ex82 {
    public static void main(String[] args) {
        //기본 생성자함수
        Robot objRobot = new Robot();
        //매개변수가 있는 생성자함수
        Robot objRobot2 = new Robot("흰색");  // 인스턴스를 만들때 매개변수를 넣을수 있다.
        System.out.println( objRobot2.color );
    }
}

생성자 함수의 호출 순서는 다음과 같다.

부모 클래스 기본생성자 -> 자식 클래스 기본생성자 -> 자식클래스 매개변수 생성자.

 

만약 부모클래스 매개변수 생성자를 호출하고자 한다면, super()함수를 이용해서 접근해야 한다.

//상속관계에서 생성자 호출되는 순서(초기화 순서)
class Energy {
    int price = 1000;
    public Energy() { //기본생성자
        System.out.println("Energy 기본생성자");
    }
    public Energy(int price) { //매개변수가 있는 생성자
        this.price = price;
        System.out.println("Energy 매개변수생성자");
    }
}
class WindEnergy extends Energy {
    int price = 2000;
    public WindEnergy() {
        System.out.println("WindEnergy 기본생성자");
    }
    public WindEnergy(int price){
        //부모의 매개변수 생성자를 호출하고 싶다~
        super( price );

        this.price = price;
        System.out.println("WindEnergy 매개변수생성자");
    }
}
// this 뒤에 점을 찍으면, 자기클래스의 변수,메소드에 접근
// this() 함수를 호출하면, 자기클래스의 생성자함수 호출
// super 뒤에 점을 찍으면, 부모클래스의 변수,메소드에 접근
// super() 함수를 호출하면, 부모클래스의 생성자함수 호출

public class ex84 {
    public static void main(String[] args) {
        // 부모 기본생성자 -> 자식 기본생성자 호출
        WindEnergy we = new WindEnergy();

        // 부모 기본생성자 -> 자식 매개변수생성자 호출
        WindEnergy we2 = new WindEnergy( 3000 );
    }
}

super함수는 상속관계에서 부모 클래스에 접근하기 위한 함수다.

부모 클래스 매개변수 생성자를 호출하고 싶으면 super(매개변수) 형식으로 매개변수 생성자를 불러낸다음, this . 매개변수 함수를 이용해 값을 할당하면 된다.