[Java] 생성자 Constructor

yeeyo·2025년 3월 5일

Java

목록 보기
3/5
post-thumbnail

생성자

생성자는 인스턴스를 생성할 때 초기에 수행할 명령이 있는 경우 미리 작성해두고, 인스턴스를 생성할 때 단 한 번 호출되는 함수이다.


Member member = new Member(); //생성자 호출

위 코드는 우리가 흔하게 사용해 왔던 코드임을 알 것이다. 사실 이 코드의 new 뒤에 있는 클래스 명은 생성자(constructor)라는 메소드를 호출하는 구문이다.

생성자 함수의 매개 변수가 없는 생성자를 기본 생성자라고 하며,

기본 생성자는 컴파일러에 의해 자동으로 추가되기 때문에 명시적으로 작성하지 않고도 사용할 수 있다.



생성자 사용 목적

생성자의 사용 목적은 다음과 같다.

  1. 인스턴스 생성 시점에 수행할 명령이 있는 경우 사용
  2. 매개 변수가 있는 생성자의 경우, 매개 변수로 전달 받은 값을 이용해 필드를 초기화하며 인스턴스를 생성할 목적으로 사용
  3. 작성한 생성자 외에는 인스턴스를 생성하는 방법을 제공하지 않을 때 사용
    → 인스턴스를 생성하는 방법을 제한


생성자 선언

생성자를 선언할 때는 보통 클래스 내부에 작성하게 된다. 이러한 생성자는 클래스 내부 아무 곳에나 선언하는 것이 아니라 통상적으로 필드 선언부와 메소드 선언부 사이에 작성하는 것이 관례이다.

public class Member{
	private String name;
	private int age;
	private String address;
	
	// 여기에 생성자 생성!
	
	public String getName(){
		...
	}
	
}

생성자를 생성하기 위해서는 다음과 같은 형태로 선언하게 된다.

접근제한자 클래스명(매개변수) {
	인스턴스 생성 시점에 수행할 명령 기술 (주로 필드를 초기화)
	this.필드명 = 매개변수;		
}

이때 생성자 선언 시 주의할 점으로는 아래와 같다.

  • 생성자 메소드는 반드시 클래스의 이름과 동일해야 한다.
  • 생성자 메소드는 반환형을 작성하지 않는다.
    → 작성하게 된다면 생성자가 아닌 메소드로 인식하게 된다.


생성자 종류

생성자의 종류로는 기본 생성자(매개 변수 X)와 매개 변수가 있는 생성자 두 가지가 있다.


  1. 기본 생성자

기본 생성자는 매개 변수가 없는 생성자이다.

자바에서는 컴파일러가 자동으로 추가해주지만 아래와 같이 명시적으로 작성할 수도 있다.

만약 매개 변수가 있는 생성자가 클래스 내부에 한 개라도 존재할 경우, 기본 생성자를 자동으로 추가해주지 않기 때문에 필요하다면 명시적으로 작성해주어야 한다.

public Member(){ //매개 변수가 없는 기본 생성자
	//.. 수행 명령
}

  1. 매개 변수가 있는 생성자
  • 매개 변수가 필드 중 몇 개만 있는 경우
public Member(String name, int age){
	this.name = name;
	this.age = age;
}
  • 매개 변수로 필드가 다 있는 경우 (모든 필드를 초기화)
public Member(String name, int age, String address){
	this.name = name;
	this.age = age;
	this.address = address;
}

this() 사용

위 2가지 방법을 사용하여 초기화를 할 수도 있지만 사전에 만들어 놓은 다른 생성자 함수를 이용해 초기화 해주는 방법도 있다.

바로 this()를 이용하면 된다.

public Member(String name, int age, String address){
	this(name, age); //this()를 이용한 필드 초기화
	this.address = address;
}

this()는 동일 클래스 내에 작성한 다른 생성자 메소드를 호출하며,

this의 괄호 안에 미리 작성한 생성자의 매개 변수 타입, 개수, 순서에 맞게 작성하면 그에 맞는 생성자를 호출하게 된다.

this()는 항상 첫 줄에 선언되어야 하고, 만약 첫 줄에 선언되지 않으면 컴파일 에러가 발생한다.



생성자 호출해보기

앞서 클래스에 생성자를 만들어 놓고 호출 할 때는 어떻게 해야할까?

바로 인스턴스를 생성 시 생성자를 호출하여 만들어 놓은 생성자 대로 매개 변수를 전달해주면 된다.

public class Main{
	public static void main(String[] args){
	
		Member member = new Member(); //기본 생성자 호출
		
		//필드 중 일부만 초기화 하는 생성자
		Member member = new Member("홍길동", 12);
		
		//모든 필드를 초기화 하는 생성자
		Member member = new Member("홍길동", 12, "주소1");
	}
}

생성자 중 필드 값을 일부만 초기화 해주는 생성자가 있는데, 이때 나머지 초기화되지 않은 값들은 null이 들어가게 된다.

profile
하나씩 천천히

0개의 댓글