생성자 :
- new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당.
- new 연산자로 호출되는 중괄호{} 블록이다.
- 모든 클래스에 반드시 하나 이상 존재한다. 따라서 클래스 내부에 선언을 생략하면 자동으로 추가된다.
객체 초기화 : 필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것.
① 기본 생성자
- 모든 클래스는 생성자가 반드시 존재하고 하나 이상의 생성자를 가질 수 있다.
- 만약 클래스 내부에 생성사 선언을 생략했다면 컴파일러는 기본생성자를 바이트 코드에 자동 추가한다.
② 생성자 선언
- 생성자는 메소드와 비슷한 모양을 가지고 잇지만, 리턴 타입이 없고 클래스 이름과 동일하다.
- 매개 변수 선언은 생략할 수도 있고 여러 개를 선언해도 된다.
- 클래스에 생성자가 명식적으로 선언되어 있을 경우, 반드시 선언된 생성자를 호출해서 객체를 생성해야 한다.
- 아래 예제를 보면 Car 클래스에 생성자 선언이 있기 때문에 기본생성자 Car(())를 호출해서 객체를 생성할 수 없고, Car(String color, int cc)를 호출해서 객체를 생성해야 한다.
- 따라서 형식을 지키지 않는다면, 다음과 같은 메세지를 확인 할 수 있다.
③ 필드 초기화
- 클래스로부터 객체가 생성될 떄 필드는 기본 초기값으로 자동 설정된다.
- 만약 다른 값으로 초기화 하고 싶다면, 필드를 선언할 때 초기값을 주거나 아니면 생성자에 초기값을 주는 방법이 있다.
- 필드를 선언할 때 초기값을 주게 되면 동일한 클래스로부터 생성되는 객체들은 모두 같은 값을 갖게 된다.
- 만약 객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화 되어야 한다면, 생성자의 매개값들을 초기화 해줘야 한다.
- 필드와 매개변수의 이름이 동일한 경우 필드 앞에 this를 붙여준다.
- this는 객체 자신의 참조인데, 'this.필드'는 this라는 참조 변수로 필드를 사용하는 것이다.
④ 생성자 오버로딩 (overloading)
- 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 의미
- 주의할 점은 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아니라는 것
- https://www.geeksforgeeks.org/constructor-overloading-java/?ref=gcse (참고자료)
⑤ 다른 생성자 호출 : this()
- 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.
- 이 경우 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방식으로 개선할 수 있다.
- 생성자에서 다른 생성자를 호출할 때에는 this()코드를 사용한다.
- this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용된다.
참고하면 좋을 자료
https://cloudstudying.kr/lectures/197
'Coding > Java' 카테고리의 다른 글
[17] JAVA 자료구조 ArrayList (0) | 2022.11.25 |
---|---|
[16] JAVA 메소드 (0) | 2022.11.24 |
[14] JAVA Math 클래스 메소드 (0) | 2022.11.23 |
[13] JAVA String 클래스 메소드 정리 (0) | 2022.11.23 |
[12] JAVA 예외처리 (0) | 2022.11.23 |