생성자

이영광·2022년 7월 13일

자바

목록 보기
25/34

생성자는 new연산자로 호출되는 중괄호 블록이다. 객체 생성시 초기화를 담당하며, 모든 클래스에 반드시 하나 이상 존재한다. 그렇기 때문에 클래스 내부에 선언을 생략하면 기본 생성자가 자동으로 추가된다.

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

객체 초기화란 필드를 초기화하거나 메서드를 호출해서 객체를 사용할 준비를 하는것을 말한다. 생성자를 싱행하지 않고는 클래스로부터 객체를 만들수 없다. new연산자에 의해 생성자가 성공적으로 실행되면 heap 영역에 객체가 생성되고 개체의 번지가 리턴된다. 리턴된 객체의 번지는 클래스 변수에 저장된다

기본 생성자

모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다. 우리가 클래스 내부에 생성자 선을 생략했다면 컴파일러는 다음과 같이 중괄호 블록이 비어있는 기본생성자를 바이트 코드에 자동 추가 한다.

클래스가 public class로 선언되면 기본 생성자에게도 public 이 붙고 , 클래스가 public 없이 class로만 선언되면 기본 생성자에도 public 이 붙지 않습니다.

예를 들어 Car 클래스를 설계할 때 생성자를 생략 하면 기본 생성자가 다음과 같이 생성된다.

public Class Car{
  
}

->
  
public class Car{

  public Car(){
  
  }

}

그렇기 때문에 클래스에 생성자를 선어하지 않아도 다음과 같이 new 연산자 뒤에 기본 생성자를 호출해서 객체를 생성할 수 있다.

Car myCar = new Car();

하지만 클래스테 명시적으로 선언한 생성자가 1개라도 있으면 컴파일러는 기본 생성자를 추가하지 않습니다. 명시적으로 생성자를 선언하는 이유는 객체를 다양한 값으로 초기화하기 위해서이다.

명시적으로 선언하는법

명시적 생성자 선언

  • 기본 생성자 대신 우리가 생성자를 명시적으로 선언하려면 다음과 같은 형태로 작성하면된다
class(매개변수){
}

생성자는 메소드와 비슷한 모양을 가지나, 리턴 타입이 없고 클래스 이름과 동일하다. 생성자 블록 내부에는 객체 초기화 코드가 작성되는데, 일반적으로 필드에 초기값을 저장하거나 메소드를 호출하여 객체 사용 전에 필요한 준비를 한다.

Car myCar = new Car("그랜저,"검정",300);

2개의 매개값은 String 타입이고 마지막 매개값은 int 타입이다, 세 매개값을 생성자가 받기 위해서는 다음과 같이 매개 변수를 선언해야한다.

public class Car{

  Car(String model, String colr, int maxSpeed){...}

}
profile
《REACT》《JAVASCRIPT 》 만지고있어욤

0개의 댓글