본문 바로가기
back-end/JAVA

17) 객체지향-생성자(constructor)와 기본생성자(default constructor)

by 모두의 향연 2021. 5. 25.
728x90
반응형

17-1) 생성자(constructor)

-인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'

-인스턴스 생성 시 수행할 작업(iv초기화)에 사용

메서드인데, 객체가 생성될 때마다 초기화 해주는 메서드라고 보면 됩니다.

 

Time t = new Time();//객체생성
t.hour = 12;
t.minute = 34;
t.second = 56;

여기서 시간, 분, 초는 처음에 0으로 기본으로 초기화됩니다.

하지만 우리가 시간, 분 초의 값을 12, 34, 56을 기본값으로 정해주는 겁니다.

 

근데 어떠세요? 매번 시, 분, 초를 세 줄로 적어야 하는 불편함이 있습니다.

그래서

Time t = new Time(12,34,56); //객체 생성과 초기화

이렇게 객체생성과 초기화를 한 줄로 쓰면 어떠세요? 간편하고 편리하죠?

이게 바로 객체생성과 동시에 생성자 호출입니다.

 

원래 객체 생성할 때 썼던 'Time t = new Time();'에서 'Time()'이 생성자였던 것입니다.

생성자가 존재하는 목적이 iv초기화지만, 다른 작업도 넣을 수 있습니다. 메서드니까요.

 

 

17-2) 생성자 생성 규칙

-생성자 이름은 클래스 이름과 같아야 한다.

클래스이름과 같은 생성자들

클래스 Card의 이름과 생성자의 이름이 같습니다. 

하나는 매개변수가 없는 생성자고 밑에는 매개변수가 있는 생성자입니다.

메서드 이름은 같은데 여러 개 있다...? 이건 이전 시간에 '오버 로딩'이라고 설명했죠?

오버 로딩의 규칙 중에서 매개변수의 개수가 다르거나 타입이 달라야 한다고 했는데 개수가 다르니 성립됩니다.

 

-리턴 값이 없다(void안 붙임)

생성자는 '대입문'이라고 생각하시면 됩니다.

대입문은 어떤 결과를 변화할 게 없습니다. 대입만 하면 되니까요.

그럼 return값이 없으면 void라고 했죠? 그래서 생성자는 리턴값이 없습니다.

왜 안 붙여요?라고 물어보지 마세요. 그냥 규칙입니다. 외우세요.

 

-모든 클래스는 반드시 생성자를 가져야 한다.

1개 이상의 생성자는 반드시 존재해야 합니다.

이전 같으면 Card c = new  Card();에서 'Card()'를 클래스 이름인 줄만 알았는데, 알고 보니 Card()는 생성자 호출을 한 거였습니다.

어? 그럼 생성자가 있어야 호출할 수 있었잖아요? 우린 이제까지 어떻게 호출한 거죠?

'Card()' 이건 기본 생성자인데, 우리가 굳이 생성자를 쓰지 않아도 컴파일러가 알아서 추가해줍니다.

언제? 생성자가 하나도 없을 때만 추가를 해줍니다.

 

 

17-3) 기본 생성자(default constructor)

-매개변수가 없는 생성자

-생성자가 하나도 없을 때만, 컴파일러가 자동 추가

 

클래스이름(){};  //기본생성자
Point(){};  //Point클래스의 기본 생성자

 

원래는 기본 생성자를 직접 작성해야 해요. 하지만 생성자가 하나도 없을 때만 컴파일러가 자동으로 추가해 줍니다.

 

 

17-4) 기본 생성자 예제

기본생성자 예제

Data1 클래스의 실제 모습은

class Data1 {
     int value;
     Data1(){}; //원래 우리가 직접 추가해야 하는데, 생성자가 하나도 없으니까 컴파일러가 알아서 추가해줍니다.
}

입니다.

 

근데, Data2 클래스는 생성자가 지금 있죠? 매개변수가 있는 생성자가 있습니다.

그래서 우리가 무조건 직접 추가해줘야 하는데,

없어서 에러가 나는 겁니다.

Data2 클래스의 오류 정정 모습은

class Data2 {
     int value;
     Data2(){};//기본 생성자 추가
     Data2(int x){
           value = x;
     }
}

입니다.

 

앞으로 습관을 들이도록 하세요. 클래스 쓰자마자 생성자부터 쓰세요.

기본 생성자를 빼먹는 경우가 너무너무 많아요.

오류를 발견해도 생성자 오류라고 안 나오기 때문에 찾기 어렵습니다.

 

 

<정리 퀴즈>

1. 생성자란?

iv초기화 메서드

2. 생성자 왜 만들어요?

iv초기화를 편리하게 하려고

3. 생성자 생성 규칙 3가지

클래스 이름과 같다, 리턴값이 없다, 모든 클래스는 반드시 생성자를 가져야 한다

4. 기본 생성자는 어떤 경우에 자동으로 추가해주나요?

생성자가 하나도 없을 때만 자동으로 추가함

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형