# 생성자
## 들어가며
---
이전 시간, 객체지향 프로그래밍의 장점과 클래스와 객체에 대한 내용을 배웠습니다.

이번 시간에는 객체를 만드는 특별한 방법! 이를 알아보도록 하죠.
## 목차
---
1. 생성자란
2. 생성자의 역할
3. 디폴트 생성자
## 1. 생성자란
---
생성자란, *객체를 만드는 특별한 메소드*입니다.
사실 우리는 이미 생성자를 사용해 보았는데요. 아래에서 한 번 생성자 호출 코드를 찾아봅시다.
```
Bicycle b = new Bicycle();
```
눈치 빠르신 분들은 촉이 왔을 겁니다. 생성자 또한 특별하지만 결국 **메소드**인 거죠. 따라서 메소드를 호출하면 반드시 따라오는 소괄호! 이를 찾으면 `Bicycle()`이 생성자인 것을 알 수 있습니다. 일반 메소드 호출과 차이가 있다면, `new`라는 키워드를 함께 사용한다는 점! 이를 기억하세요.

그렇다면, 이러한 생성자는 어떤 역할을 할까요?
## 2. 생성자의 역할
---
생성자는 *객체 생성*과 *필드 초기화*라는 두 가지의 역할을 수행합니다.

보통 객체를 생성하고 나면, 필드 값을 초기화하는데요. 이전 시간 우리가 실습을 통해 연습했던 코드! 이를 복습할 겸 다시 한번 확인해보도록 합시다.
```
/* 1. 객체 생성 */
Bicycle b = new Bicycle();
/* 2. 필드 초기화 */
b.name = "부릉2";
b.weight = 21.74;
b.price = 899000;
```
위 코드를 한 줄로 줄일 수 있다면 어떨까요? 영혼을 팔아서라도 그렇게 해야 할 것입니다. 농담이구요. 아무튼 위 코드는 한 줄로 줄일 수 있습니다. 어떻게요? 바로 생성자를 통해 말이죠.
```
/* 객체 생성과 동시에 초기화 */
Bicycle b = new Bicycle("부릉2", 21.74, 899000);
```
무언가 익숙한 코드죠? 어디서 많이 봤던 형태 아닙니까? 맞습니다. 메소드를 호출할 때, 값을 전달하는 형태입니다. 생성자 또한 메소드이기에 가능한 거죠.

그런데 위 코드는 지금 바로 동작하진 않습니다. 왜죠? 특별한 메소드 즉 생성자가 정의되어있지 않기 때문이죠.
그렇다면 올바른 동작을 위해 3개의 파라미터를 갖는 생성자를 추가해주면 되겠습니다. 어디에요? `Bicycle` 클래스 내부에 말이죠. 주의할 점이 있다면 메소드 정의와 달리 *반환 타입을 적지 않는 점*. 이를 기억하면 되겠습니다.
```
class Bicycle {
String name;
double weight;
int price;
/* 파라미터가 있는 생성자 - 객체 생성 및 필드 초기화 */
public Bicycle(String s, double d, int i) {
name = s; // 파라미터 s를 객체의 이름으로 대입
weight = d; // 파라미터 d를 객체의 무게로 대입
price = i; // 파라미터 i를 객체의 가격으로 대입
}
}
```
## 3. 디폴트 생성자
---
그럼 여기서 질문! 생성자가 없었을 땐 어떻게 객체가 만들어졌던 걸까요?
```
Bicycle b = new Bicycle(); // 분명 생성자가 없었는데?!
```
아래와 같이 생성자를 만들어줘야 했던 것 아닙니까?
```
class Bicycle {
String name;
double weight;
int price;
/* 생성자 */
public Bicycle() {
// 비어있음
}
}
```
정답부터 말씀드리자면, 디폴트 생성자 때문입니다. 디폴트 생성자는 클래스 내부에 *생성자가 존재하지 않는 경우 자동으로 추가*되는 생성자인데요. 위 코드의 예와 같이 파라미터가 없고, 중괄호 내부가 비어있다는 점이 특징입니다.
## 요약
---
#### 정의 및 역할
- 생성자는 객체를 만드는 특별한 메소드다.
- 생성자는 역할은, 객체 생성과 필드 초기화이다.
#### 특징
- 필드 초기화를 위해서는 파라미터가 있는 생성자를 정의해야 한다.
- 클래스에 생성자가 없을 땐, 디폴트 생성자가 추가된다.
## 확인하기
---
<div class="interact_responsive_padding" style="padding:100% 0 0 0;position:relative;margin-bottom:5px;"><div class="interact_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><iframe id="interactApp5cdd129935706c001424970c" width="100%" height="100%" style="border:none;max-width:100%;margin:0;" allowTransparency="true" frameborder="0" src="https://quiz.tryinteract.com/#/5cdd129935706c001424970c/q/1?method=iframe"></iframe></div></div>