생성자
- 클래스로부터 new 연산자로 객체를 생성할 때 호출되어 객체의 초기화를 담당
객체 초기화
- 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것
생성자가 성공적으로 실행
- 힙 영역에 객체 생성되고 객체 번지가 리턴

기본 생성자
- 클래스 내부에 생성자 선언 생략할 경우 바이트 코드에 자동 추가
[public] 클래스() { }
- 클래스에 생성자 선언하지 않아도 new 생성자()로 객체 생성 가능

생성자 선언
클래스( 매개변수 선언, ...){
}
- 매개 변수 선언은 생략할 수도 있고 여러 개 선언할 수도 있음
public class Car{
Car(String model, String color, int maxSpped) { ... }
}
- 클래스에 생성자가 명시적으로 선언되었을 경우 반드시 선언된 생성자 호출하여 객체 생성
Car myCar = new Car("그랜저", "검정", 300)
필드 초기화
public class Korean {
String nation = "대한민국";
String name;
String ssn;
}
public Korean(String n, String s) {
name = n;
ssn = s;
}
Korean k1 = new Korean("김자바", "011225-1234567");
Korean k2 = new Korean("용자바", "990525-0654321");
- 매개변수 이름은 필드 이름과 유사하거나 동일한 것 사용 권장
- 필드와 매개 변수 이름 완전히 동일할 경우 this필드로 표현
public Korean(String name, String ssn){
this.name = name;
this.ssn = ssn;
}
생성자 오버로딩
- 매개 변수를 달리하는 생성자 여러 개 선언
- 외부에서 제공되는 다양한 데이터 사용하여 객체 초기화하려면 생성자 역시 다양화될 필요가 있음

- 매개 변수의 타입, 개수, 선언된 순서 가은 경우, 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아님
Car(String model, String color) {...}
Car(String color, String model) {...}
다른 생성자 호출: this()
- 생성자에서 다른 생성자 호출
- 필드 초기화 내용을 한 생성자에만 집중 작성하고 나머지 생성자는 초기화 내용 가진 생성자로 호출
생성자 오버로딩 증가 시 중복 코드 발생 문제 해결

- 생성자 첫 줄에서만 허용
정리
- 기본 생성자: 클래스 선언 시 컴파일에 의해 자동으로 추가되는 생성자
- 생성자 선언: 생성자를 명시적으로 선언 가능, 생성자를 선언하면 기본 생성자는 생성되지 않음
- 매개 변수:생성자 호출 시 값을 전달받기 위해 선언하는 변수
- 객체 초기화: 생성자 내부에서 필드값 초기화하거나 메소드 호출에서 사용 준비를 하는 것
- 오버로딩: 매개변수 달리하는 생성자를 여러 개 선언
- this(): 객체 자신의 또 다른 생성자를 호출할 때 사용