생성자 :

  • new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당. 
  • new 연산자로 호출되는 중괄호{} 블록이다.
  • 모든 클래스에 반드시 하나 이상 존재한다. 따라서 클래스 내부에 선언을 생략하면 자동으로 추가된다.

객체 초기화 : 필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것. 

 


① 기본 생성자

  • 모든 클래스는 생성자가 반드시 존재하고 하나 이상의 생성자를 가질 수 있다.
  • 만약 클래스 내부에 생성사 선언을 생략했다면 컴파일러는 기본생성자를 바이트 코드에 자동 추가한다.

 

② 생성자 선언

  • 생성자는 메소드와 비슷한 모양을 가지고 잇지만, 리턴 타입이 없고 클래스 이름과 동일하다.
  • 매개 변수 선언은 생략할 수도 있고 여러 개를 선언해도 된다.
  • 클래스에 생성자가 명식적으로 선언되어 있을 경우, 반드시 선언된 생성자를 호출해서 객체를 생성해야 한다.

 

https://cloudstudying.kr/lectures/197

 

  • 아래 예제를 보면 Car 클래스에 생성자 선언이 있기 때문에 기본생성자 Car(())를 호출해서 객체를 생성할 수 없고, Car(String color, int cc)를 호출해서 객체를 생성해야 한다.
  • 따라서 형식을 지키지 않는다면, 다음과 같은 메세지를 확인 할 수 있다.

 

Expeceted 2 arguments but found 0 이라는 경고 메시지를 확인할 수 있다.

 

 

③ 필드 초기화

  • 클래스로부터 객체가 생성될 떄 필드는 기본 초기값으로 자동 설정된다.
  • 만약 다른 값으로 초기화 하고 싶다면, 필드를 선언할 때 초기값을 주거나 아니면 생성자에 초기값을 주는 방법이 있다.
  • 필드를 선언할 때 초기값을 주게 되면 동일한 클래스로부터 생성되는 객체들은 모두 같은 값을 갖게 된다.
  • 만약 객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화 되어야 한다면, 생성자의 매개값들을 초기화 해줘야 한다.
  • 필드와 매개변수의 이름이 동일한 경우 필드 앞에 this를 붙여준다. 
  • this는 객체 자신의 참조인데, 'this.필드'는 this라는 참조 변수로 필드를 사용하는 것이다.

 

④ 생성자 오버로딩 (overloading)

  • 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 의미
  • 주의할 점은 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아니라는 것
  • https://www.geeksforgeeks.org/constructor-overloading-java/?ref=gcse (참고자료)

 

필드 부분
생성자 오버로딩

 

 

⑤ 다른 생성자 호출 : this()

  • 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.
  • 이 경우 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방식으로 개선할 수 있다.
  • 생성자에서 다른 생성자를 호출할 때에는 this()코드를 사용한다.
  • this()자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용된다.

 


참고하면 좋을 자료

https://cloudstudying.kr/lectures/197

 

10 생성자 호출과 정의 | CloudStudying

# 생성자(constructor) 호출과 정의 ## 들어가며.. --- 붕어빵 틀로 붕어빵을 찍어내는 마법 같은 매직! ![클라우드스터딩-자바-생성자-호출-인스턴스화-constructor][Imgur](https://i.imgur.com/dl4KpzQ.png) 클래스

cloudstudying.kr

 

'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

+ Recent posts