Java

[Java] 자바의 생성자 목적과 특징, 기본 생성자, this 레퍼런스

yujinius 2024. 4. 8. 16:18

생성자의 개념과 목적

  • 생성자(constructor)는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다. 

 

생성자의 특징

  1. 생성자의 이름은 클래스와 동일하다.
  2. 생성자는 여러 개 작성(오버로딩)할 수 있다. 
    • 매개변수 개수와 타입만 다르면 여러 개 가능
  3. 생성자는 new를 통해 객체를 생성할 때 한번만 호출된다. 
    • 객체 생성은 반드시 new를 통해서만 이루어지며, 생성자는 이 순간 자동으로 한번만 호출된다. 
  4. 생성자에 리턴 타입을 지정할 수 없다. 
    • 생성자는 어떤 값도 리턴하지 않기 때문
  5. 생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함이다. 
    • 객체 초기화를 하여 필요한 초기 준비를 하는 데에 이용
    • 필드 초기화, 필요한 메모리 확보, 파일 열기, 네트워크 연결 등 객체가 활동하기 전에 필요한 초기 준비

기본 생성자(default constructor)

매개변수와 실행 코드가 없어 아무 일도 하지 않고 단순 리턴하는 생성자

디폴트 생성자라고 불림

 

1. 기본 생성자가 자동으로 생성되는 경우 

  • new로 객체 생성할 때 클래스에 생성자가 없으면 자바 컴파일러가 기본 생성자를 삽입하여 호출되도록 한다. 
  • 이때 소스 파일이 변하지는 않고 컴파일러에 의해 자동 삽입된 기본 생성자는 사용자의 눈에 보이지 않게 삽입된다.

 

2. 기본 생성자가 자동으로 생성되지 않는 경우

  • 생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본 생성자를 삽입해주지 않는다. 
  • 즉, public Circle(int r)이 있는 클래스에서 new Circle();로 생성을 하면 기본 생성자가 자동 삽입되지 않고 컴파일 에러가 발생한다. 

this 레퍼런스

  • this는 현재 객체 자신에 대한 레퍼런스이다. 
  • 구체적으로는 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스이다. 
  • 컴파일러에 의해 자동 관리된다. 
  • public Circle(int radius){ this.radius = radius; } 이런 식일 때 필요하다. 
  • 메소드가 객체 자신의 레퍼런스를 리턴해야 할 경우 다음과 같이 this를 리턴하면 된다.
public Circle getMe(){return this;}

 

this()로 다른 생성자 호출

this()는 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용하는 자바 코드이다.

public class Book{
...
public Book(String title){
		this(title, "작자미상");
	}
    
public Book(String title, String author){
	this.title = title;
    this.author = aurhor;
}
...
}

 

this() 사용 시 주의할 점

  • this()는 반드시 생성자 코드에서만 호출할 수 있다. 
  • this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용한다.
  • this()는 반드시 생성자의 첫 번째 문장이 되어야 한다.