접근지정자 클래스명 (매개변수목록){ }
생성자란
* 생성자는 객체를 생성할때 호출되는 일종의 메서드이다.
객체 생성 시 반드시 호출된다.
* 반환형이 없고 클래스명으로 이름을 지어야한다.
생성하지 못하는 생성자
* 생성자를 private로 만들 수도 있다.
당연히 외부에서 new 객체를 하여도 만들 수 없다.
* 이 생성자는 내부에서만 호출이 가능하다.
예를 들어 public 생성자가 내부에서 private 생성자를 호출할 수 있다.
또는 클래스의 객체 생성을 원하지 않을 때 사용하기도 한다.
기본 생성자 Default Constructor
* 클래스를 만들 때 생성자를 만들지 않으면 자동으로 추가되는 생성자
컴파일러가 알아서 넣어준다.
* 기본 생성자는 매개변수가 없고,
생성자에 내용이 없다.
(멤버 변수는 원래 0으로 초기화가 됨. 기본 생성자가 하는 건 아님.)
* 프로그래머가 생성자를 직접 만들면 기본생성자는 만들어지지 않는다.
오버로딩 가능.
* 생성자를 직접 만들었으니 기본 생성자는 없음.
* 시그니쳐에 따라 다른 생성자가 호출된다.
public Human(String name, Sex sex, int age, float height){
this.name = name;
this.sex = sex;
this.age = age;
this.height = height;
}
public Human(String name){
this.name = name;
}
* 오버로딩을 하면서 생성자 코드중복이 생겼다.
생성자의 코드중복 없애기
* this()를 사용하면 생성자 내부에서 다른 생성자를 호출할 수 있다.
public Human(String name, Sex sex, int age, float height){
this(String name);
this.sex = sex;
this.age = age;
this.height = height;
}
public Human(String name){
this.name = name;
}
* public Human(String name, Sex sex, int age, float height) 내부에서
public Human(String name)를 호출함으로써
코드 중복이 없어지고
name에 대한 변화는 public Human(String name)에서만 이루어진다.
왜 있냐
* 생성자는 함수와 비슷하며,
차이점은 반환형이 없고 객체 생성 시 반드시 호출된다는 점이다.
* 객체 생성 시 반드시 호출되는 것.
우리는 생성자를 통해 데이터를 집어넣는다.
즉, 우리는 언제나 완성된 형태의 객체만을 사용한다.
* 객체에 데이터를 넣지 않았다면,
그것은 생성자를 일부러 그렇게 만든 것이다.
* 우리는 생성자를 통해 객체를 만듦으로써
객체가 온전한 값을 가지고 있는 상태인지
의문은 갖지 않는다.
* 만약 객체가 정상적으로 만들어지지 않았다면
생성자의 잘못이다.
귀여운 그림은 쭐어님이 그리셨습니다.
'자바 JAVA' 카테고리의 다른 글
[JAVA]자바 - 싱글톤 패턴 Singletone Pattern (0) | 2021.07.15 |
---|---|
[JAVA]자바 - getter와 setter (0) | 2021.07.04 |
[JAVA]자바 - 다형성 Polymorphism (1) | 2021.06.30 |
[JAVA]자바 - 데이터 추상화 Data Abstraction (0) | 2021.06.29 |
[JAVA]자바 - 캡슐화 Encapsulation (0) | 2021.06.29 |