본문 바로가기
Java/문법

Java 생성자(Constructor)

by ssury94 2024. 12. 11.

생성자(Constructor)란?

자바의 객체 지향 프로그래밍에서 클래스의 생성자는 객체 생성 시 제일 먼저 호출되는 특수한 메서드다. 객체가 고유한 상태를 초기화하고 정상적인 작업을 수행할 수 있게 준비하는 매우 중요한 역할을 수행한다. 생성자는 클래스로부터 객체를 생성할 때 new 연산자와 함께 호출되어 객체의 필드를 초기화하고, 메서드를 호출해 객체를 사용할 준비를 하는 특별한 블록이다.

 

생성자는 왜 필요한가?

객체의 상태는 필드(변수)에 의해 결정됩니다.

필드에 특정 값을 설정함으로써 객체마다 다른 상태를 지닐 수 있다.

클래스 설계상에 초기값을 설정해주지 않으면, 모든 객체가 동일한 데이터를 갖게 될 위험이 있다.

따라서 생성 시점부터 원하는 초기값을 객체에 설정할 수 있도록 생성자가 필요!

 

 

Default 생성자

엔티티 클래스에 객체(붕어빵)의 변수값 (속재료)을 지정 후

메인함수 부분에서 new() 키워드로 객체의 변수를 지정해주기

 

public class Bungeobbang {
    public String ingredients;

    public Bungeobbang() {
    }
import entity.Bungeobbang;

public class BungeobbangTest {
    public static void main(String[] args) {

        Bungeobbang b1 =new Bungeobbang();
        b1.ingredients="슈크림";
    }
}

 


매개변수가 있는 생성자

생성자를 생성하면, 기본(default) 생성자는 별도로 입력해야 한다.

 

 

프로그램에서 간단하게 만들어줄 수 있으니 적극활용하자~

누가이용하든 불편함없게 기본생성자, 매개변수가 있는 생성자 모두 만들어준다!

생성자는 보통 필드 아래에 삽입한다!

 

package entity;

public class Bungeobbang {
    public String ingredients;
    public String price;
    // 디폴트 생성자
    public Bungeobbang() {
    }
    // 매개변수가 있는 생성자
    public Bungeobbang(String ingredients) {
        this.ingredients = ingredients;
    }
}
import entity.Bungeobbang;

public class BungeobbangTest {
    public static void main(String[] args) {

        Bungeobbang b1 =new Bungeobbang();
        b1.ingredients="슈크림";
        Bungeobbang b2 = new Bungeobbang("피자");
    }
}

메소드 오버로딩을 이용해보기

가격 변수도 추가하자.

슈크림 붕어빵은 1500원, 피자 붕어빵은 2000원, 단팥 붕어빵은 아직 가격을 못정해서 가격을 비워놔야겠다.

 

package entity;

public class Bungeobbang {
    public String ingredients;
    public String price;

    public Bungeobbang() {
    }


    // 속재료와 가격을 정한 붕어빵
    public Bungeobbang(String ingredients,String price) {
        this.ingredients = ingredients;
        this.price=price;
    }
    // 가격을 아직 못정한 붕어빵
    public Bungeobbang(String ingredients) {
        this.ingredients = ingredients;
        price = "싯가";
    }

    // 붕어빵 가격표를 보여주세요.
    public void show(){
        System.out.println(ingredients+"붕어빵, 가격은 "+price);
    }
}

 

import entity.Bungeobbang;

public class BungeobbangTest {
    public static void main(String[] args) {

        Bungeobbang b1 =new Bungeobbang();
        b1.ingredients="슈크림";
        b1.price="1500원";
        Bungeobbang b2 = new Bungeobbang("피자","2000원");
        Bungeobbang b3 = new Bungeobbang("단팥");

        b1.show();
        b2.show();
        b3.show();
    }
}