병훈's Blog

[Java] 생성자 (Constructor) 본문

Java

[Java] 생성자 (Constructor)

thdqudgns 2022. 9. 25. 21:27

생성자 (Constructor)

자 저번 시간에 클래스와 객체에 대해서는 공부했었죠?
Java를 시작하면 처음에 변수의 선언과 초기화를 배우구요.

 

자 이번에는 위 두 개념을 합쳐볼 거예요!

클래스를 만듭니다. 변수와 메서드가 있겠죠?

그 중에서 변수가 선언만 되고, 초기화가 안 된 상황이에요.
이제 값을 넣을 건데...

 

'아.. 객체를 생성한 후에,

내가 일일히 변수에 값을 넣어줘야 하나?


c.kind = "Heart";

매번 이러면 너무 귀찮아...ㅠㅠ
더 좋은 방법은 없을까?'

있습니다. 바로 생성자를 이용하는 것이죠

 

생성자가 뭔데??

  • 인스턴스가 생성될 때마다 기본으로 호출되는 '인스턴스 초기화 메소드'
  • 인스턴스 변수의 초기화 or 인스턴스 생성과 동시에 수행할 기능이다.
  • ※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

자 설명이 부족하죠? 하나씩 살펴 보자구요.

Card card = new Card();

Card 클래스의 참조변수(주소를 저장하는 변수)를
card라는 이름으로 만들었어요.


그리고 new Card(); 로 인스턴스를 만들었어요.
그럼 이 인스턴스의 주소값이 card에 저장돼요.

new 가 인스턴스를 생성하는 키워드라면 Card() 는 뭘까요?

 

Card() 가 생성자에요.
클래스 이름이랑 똑같은 메소드의 형태죠.

즉, Card card = new Card(); 이 코드는

 

Card() 생성자가 시키는대로 new (새로운) 인스턴스를 만들자!!
그리고 이 인스턴스의 주소를 참조변수 card 에 넣어주자!!
그럼 참조변수를 통해 인스턴스의 멤버(변수,메소드)들을 다룰 수 있어!!
데이터를 담아서 활용하거나, 특정 기능을 수행시킬 수 있다고!!

이런 의미입니다.

근데, 위에서 이런 말을 했어요.

※ 모든 클래스에는  반드시 하나 이상의 생성자가 있어야 한다.

 

하지만 전에는 생성자를 안 적었단 말이죠?

그 이유는 생성자를 클래스에 작성하지 않아도,
컴파일러가 기본 생성자 Card() {} 를 생성해주기 때문이에요.
( 매개변수가 없는 생성자가 기본 생성자 )

 

근데, 매개변수가 있는 생성자를 써놓잖아요? Card(String x) {}
그럼 컴파일러는 기본 생성자를 만들어 주지 않아요.

 

이미 생성자가 있으니, 기본 생성자를 만들 필요가 없는 거죠

근데 기본 생성자가 없으면 나중에 에러가 발생할 수 있어요.
앞으로는 클래스를 생성할 때 기본 생성자를 직.접. 적어주자고요!

한 번 매개변수가 있는 생성자의 예시를 볼까요?

class Car {
    String color;        // 차의 색
    String gearType;    // 차의 기어유형
    int door;            // 차 문의 개수

    Car () {}    // 기본 생성자

    Car(String color, String gearType, int door) {    // 매개변수가 있는 생성자
        this.color = color;    //this.color은 인스턴스변수, color은 매개변수로 받아온 지역변수다.
        this.gearType = gearType;
        this.door = door;
    }
}

Car c1 = new Car();
Car c2 = new Car("white","auto",4);
  • c1은 기본 생성자를 통해 인스턴스가 만들어지죠.
    이러면 변수에 값을 저장하는 코드를 직접 작성해야 돼죠.
  • c2는 매개변수가 있는 생성자를 통해 인스턴스를 만들었어요.
    "white","auto",4 가 각각 color, gearType, door에 저장된 채로 인스턴스가 만들어지죠.
    이렇게 인스턴스변수를 생성과 동시에 초기화 시킬 수 있어요.

아까 봤던 생성자 설명

  • 클래스명과 동일한 메소드명을 사용한다.
  • 인스턴스가 생성될 때마다 기본으로 호출되는 '인스턴스 초기화 메소드'
  • 인스턴스 변수의 초기화 or 인스턴스 생성과 동시에 수행할 기능이다.
  • ※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

이제 이해가 좀 되죠?
축하해요. 다음에 또 만나요~

728x90
728x90

'Java' 카테고리의 다른 글

[Java] 초기화 (initialized)  (0) 2022.09.25
[Java] this  (0) 2022.09.25
[Java] 메소드 오버로딩 (Method Overloading)  (0) 2022.09.25
[Java] 변수와 메소드 / JVM  (0) 2022.09.25
[Java] 클래스와 객체 (Class and Object)  (0) 2022.09.25