클래스를 사용하여 인스턴스 생성 시 호출되는 메서드 형태
-> new 키워드 뒤에 생성자 호출 코드 기술됨
인스턴스 변수 초기화 또는 인스턴스 생성 시 초기에 수행할 작업 기술 용도
-> 객체 생성 시 기본적으로 가져야하는 값 설정
-> 객체가 기본적으로 가져야 할 공통적인 값을 설정
메서드와 형태가 유사하나 차이점 존재
-> 선언부에 리턴타입이 없음(리턴 타입 자체를 기술하지 않음)
-> 생성자 이름이 클래스 이름과 동일
파라미터가 있을 수도 있고 없을 수도 있음
클래스 정의 시 생성자를 하나도 정의하지 않을 경우 컴파일러에 의해 자동으로 기본(Default) 생성자가 생성됨
-> 기본생성자는 접근제한자가 클래스와 같고, 이름은 클래스 이름과 같음
(리턴타입X, 매개변수X, 중괄호 블록 내에 수행할 코드X)
별도로 호출할 수 없으며, 반드시 new 키워드 뒤에만 지정 가능
< 생성자 정의 기본 문법 >
[접근제한자] 클래스명 ([매개변수 선언...]) {
// 생성자 호출 시점에 수행할 작업을 기술
// 인스턴스 변수 초기화 등
}
< 인스턴스 생성 기본 문법 >
클래스명 참조변수명 = new 생성자명([데이터...]);
생성자 호출 시점에서 전달해야 할 데이터가 있을 경우 생성자 파라미터(매개변수) 선언 가능
= 메서드와 동일
전달받은 데이터는 인스턴스 변수 초기화 용도로 사용
-> 객체마다 다른 데이터를 가진 채로 인스턴스를 생성하기 위해 사용
< 파라미터 생성자 정의 기본 문법 >
[접근제한자] 클래스명(매개변수 선언...) {
인스턴스 변수명 = 데이터;
// 생성자 호출 시점에 파라미터에 데이터를 전달하여
// 인스턴스 내의 인스턴스 변수 초기화
}
파라미터 생성자 자동 생성 단축키
Alt + Shift + S -> O
(멤버 변수가 하나도 없을 경우에는 자동 생성창 실행되지 않음)
public static void main(String[] args) {
Person p = new Person(); // 인스턴스 생성
// 만약에 기본 생성자를 정의하지 않고
// 파라미터 생성자를 하나라도 정의했다면
// 컴파일러에 의해 기본 생성자가 자동 생성되지 않기 때문에
// 기본 생성자를 호출할 수 없음
// 지금은 Person 클래스에 기본 생성자를 정의했기 때문에 사용 가능
Person p2 = new Person("홍길동", 20);
// 파라미터 생성자는 매개변수를 선언해줘야 오류 발생하지 않음
}
class Person {
String name;
int age;
public Person() {} // 기본 생성자
public Person(String name, int age) { // 파라미터 생성자
this.name = name;
this.age = age;
}
}