생성자
객체를 생성할 때 호출되는 인스턴스 초기화 메서드
new
키워드와 함께 호출Person person1 = new Person();
- 일반 멤버 변수의 초기화나 객체 생성 시 실행돼야 하는 작업 정리
- 클래스 이름과 동일
- 리턴 타입이 없음
기본 생성자(default constructor)
- 파라미터가 없고 구현부가 비어있음
- 생성자 코드가 없으면 컴파일러가 기본 생성자 제공
public class DefaultPerson {
String name;
int age;
boolean isHungry;
//public DefaultPerson() {} -- 생략된 기본 생성자
public static void main(String\[\] args){
DefaultPerson person = new DefaultPerson();
person.name = "홍길동";
person.age = 10;
person.isHungry = false;
}
}
파라미터가 있는 생성자
- 생성자 호출 시 값을 넘겨줘서 초기화
- 파라미터가 있는 생성자를 만들면 기본 생성자는 추가되지 않음
public class ParameterPerson {
String name;
int age;
boolean isHungry;
public ParameterPerson(String n, int a, boolean i) {
name = n;
age = a;
isHungry = i;
}
public static void main(String\[\] args){
ParameterPerson person1 = new ParameterPerson("홍길동", 10, false);
ParameterPerson person2 = new ParameterPerson(); //기본 생성자가 추기 되지 않았으므로 오류
}
}
this
this는 this.
과 this()
로 구분하여 사용한다.
public class ParameterPerson {
String name;
int age;
boolean isHungry;
public ParameterPerson(String name, int age, boolean isHungry) {
this.name = name;
this.age = age;
this.isHungry = isHungry;
}
}
this.
- 객체 참조 변수로써 객체 자신을 가리킴
- 변수 이름은 가독성이 좋아야해서 이름을 작성하다보면 멤버 변수와 같아질 때가 있는데,
- _이름이 같을 경우에 this를 사용*_한다.
- 이름이 같지 않더라도 명시적으로 멤버임을 알리고 싶을 경우 this를 붙여도 된다.
- static 영역에서는 객체와 상관이 없으므로 this 사용이 불가하다.
this()
- 생성자도 오버로딩 가능
- 객체 생성 시 멤버 변수만 초기화 진행 -> 생성자 별 코드의 중복 발생
this.name = name;
중복 발생this(name, 0);
으로 호출- 반드시 첫 줄에서만 호출 가능
System.out.println();
아래에서this();
하면 오류 발생
public class OverloadConstructorPerson {
String name;
int age;
public OverloadConstructorPerson(String name, int age) {
this.name = name;
this.age = age;
}
public OverloadConstructorPerson(String name) {
this.name = name; // 중복 코드
this(name, 0); //중복 해결 : 위의 생성자를 호출
}
public static void main(String\[\] args){
}
}