참치코더의 꿈 메모장

2021/08/01 Java - 생성자 본문

JAVA

2021/08/01 Java - 생성자

참치깡 2021. 8. 1. 23:20
728x90

생성자는 new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다

 

생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다.

 

new 연산자에 의해 생성자가 성공적으로 실행되면 힙 영역에 객체가 생성되고 객체의 번지가 리턴된다.

리턴된 객체의 번지는 클래스 변수에 저장된다

 

 

기본 생성자 

 

모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다.

만약 클래스를 선언하지 않았다면 컴파일러는 자동으로 기본 생성자를 바이트 코드에 자동 추가해준다.

 

 

[public] 클래스( ) { }

 

* 클래스에 명시적으로 선언한 생성자가 1개라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.

 

생성자 선언

 

클래스( 매개변수선언, ...){

     }

 

생성자는 메소드와 비슷하지만 리턴 타입이 없고 클래스 이름과 동일하다.

 

매개변수 선언은 생략할 수도 있고, 여러 개를 선언해도 좋다.

매개변수는 new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 한다.

 

클래스에 생성자가 명시적으로 선언되어 있을 경우에는 반드시 선언된 생성자를 호출해서

객체를 생성해야 한다.

 

필드 초기화

 

다른 값으로 필드를 초기화 하고 싶다면 2가지 방법이 있다.

 

1. 필드를 선언할 때 초기화 

2. 생성자에서 초기화

 

필드를 선언할떄 초기화 하면 이 클래스로 만들어진 모든 기본값은 다 같은 값을 갖게된다.

만약 객체 생성 시점에 외부에서 제공되는 다양한 값들로 초기화되어야 한다면 생성자에서 초기화 해야 한다.

 

* 매개 변수의 이름이 짧으면 코드의 가독성이 좋지 않기 때문에 가능하면 초기화시킬 필드 이름과 비슷하거나 

  동일한 이름을 사용하는 것이 좋다.

 

* 객체의 필드는 하나가 아니라 여러 개가 있고, 이 필드를 모두 생성자에서 초기화 한다면

  생성자의 매개변수 수는 객체의 필드 수만큼 선언되어야 한다.

 

생성자 오버로딩

 

자바는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩을 제공한다

생성자 오버로딩이란 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다

 

public class 클래스{

 

클래스( [타입 매개변수, ...] )

 

}

 

클래스( [타입 매개변수, ...] ){

 

}

}

 

생성자가 오버로딩 되어있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 의해 호출될 

생성자가 결정된다.

 

다른 생성자 호출: this( )

 

생성자 간의 호출이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.

이럴때는 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 

생성자를 호출하는 방식으로 개선할 수 있다.

 

클래스( [매개변수, ...] ) {

   this(매개변수, ... , 값, ...);

   실행문;

}

 

this( )는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫줄에서만 허용된다

this( )의 매개값은 호출되는 생성자의 매개 변수에 맞게 제공해야 한다.

 

728x90
Comments