티스토리 뷰

Java

[JAVA] 생성자(Constructor)

TreeBomb 2023. 12. 19. 16:37

생성자란?

- 클래스를 구성하는 구성요소 중 하나인 생성자는 객체를 생성할 때 호출되어 객체의 초기화를 담당하는 특별한 메서드다.

- 객체를 생성하고 초기화하기 위해서는 반드시 생성자를 호출해야 한다.

- 따라서 객체를 생성해야 하는 참조용 클래스는 모두 생성자를 가지고 있다.

 

생성자의 정의

- 생성자는 반환값이 없지만, 반환타입을 아예 작성하지 않는다.

- 생성자는 필드의 초기화를 위한 데이터를 파라미터(매개변수)로 전달받을 수 있다.

 

생성자의 호출 방법

접근제한자 클래스명(파리미터1, 파리미터2,...){

}

 

생성자가 호출되는 경우

- 생성자는 클래스를 기반으로 객체를 생성할 때, 객체의 초기화를 담당하는 역할을 하므로 객체를 생성할 때만 호출할 수 있다.

 

기본생성자

- 자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.

- 클래스를 생성하면서 개발자가 직접 생성자를 선언하지 않아도 자바 컴파일러가 기본생성자를 자동으로 제공해주고 있다. (개발자 눈에는 안 보인다.)

- 기본생성자는 파라미터가 별도로 없으며, 중괄호 안에 코드가 없는 비어있는 생성자를 말한다.

- 기본생성자는 개발자가 생성자를 직접 선언하지 안 했을 경우에만 컴파일러가 추가한다.

public class ConTest {	//생성용 클래스
	public String name; //필드
    
	public ConTest(String name) {
		this.name = name;
		System.out.println("name이 " + name + "으로 초기화 됨");
		System.out.println("나는 생성자임ㅋ");
	}
}

 

public class ConMain {	//실행용 클래스
	public static void main(String[] args) {
		ConTest ct = new ConTest("홍길동");
		//ct.ConTest(); 생성자는 객체 선언시에만 호출할 수 있다.		
	}
}

결과

name이 홍길동으로 초기화 됨
나는 생성자임ㅋ

실행용 클래스에 객체를 생성한 코드만 있지만 출력문 두 개가 출력된 것을 확인하면서 우리는 생성자 메서드는 객체를 생성할 때 자동으로 호출되는 것을 알 수 있다.

 

생성자를 선언하는 이유

- 생성자는 객체를 생성함과 동시에 객체를 초기화할 수 있다.

- 생성자를 통해 객체를 만들기 위해 꼭 필요한 데이터를 입력받으면서 입력하지 않으면 객체를 생성할 수 없게 해 주는 기능으로 쓸 수 있다.

ex) 사람 객체를 생성하는데 이름을 적지 않으면 객체를 생성 못하도록 막을 수 있다.

 

 

예제

생성자를 이용해 이름과 나이를 파라미터로 받아서 초기화를 해주고,

이름과 나이를 출력해 주는 메서드를 만들어보자

public class Person {	//생성용 클래스
	String name;
	int age;
	public Person(String n, int a) {
		name = n;
		age = a;
	} 
	public void introduce(){
		System.out.printf("안녕하세요 저는 %d살 %s입니다. \n",age,name);
	}	
}
public class Pmain {	//실행용 클래스
	public static void main(String[] args) {
		Person p1 = new Person("홍길동",30);
		p1.introduce();
		Person p2 = new Person("김길동",20);
		p2.introduce();	
	}
}

결과

안녕하세요 저는 30살 홍길동입니다. 
안녕하세요 저는 20살 김길동입니다.

 

생성자 쉽게 만들기

생성자도 getter&setter와 같이 쉽게 만들 수 있는 방법이 있다.

위 코드로 예시를 들어보자

일단 만들어 뒀도 생성자는 다시 지우고 

우클릭 -> Sourse -> Generate Constructor usisng Field... 을 클릭하면

getter&setter를 만들 때와 비슷한 창이 나온다.

지금은 필드가 두 개밖에 없고 있는 필드를 모두 생성자를 통해 받아올 예정이니 Select All을 클릭해 모두 선택을 해준 뒤

생성해 보자.

자동으로 선택한 필드를 초기화시킬 수 있는 생성자 메서드가 만들어진 것을 확인할 수 있다.

 

다음 글에서는 오버로딩에 대해 배워보자

 

[JAVA] 오버로딩(OverLoading)

오버로딩이란? - 자바에서 하나의 메서드 이름으로 여러 기능을 구현할 때 사용한다. 오버로딩의 조건 1. 메서드 이름이 같아야 한다. 2. 파라미터의 개수가 달라야 한다. 3. 파라미터의 개수가 같

treebomb-code.tistory.com

 

'Java' 카테고리의 다른 글

[JAVA] 오버로딩(OverLoading), this, this()  (0) 2023.12.20
[JAVA]setter&getter  (0) 2023.12.15
[JAVA] 메서드(method)  (0) 2023.12.14
[JAVA]클래스(Class)  (0) 2023.12.13
[JAVA]배열2(Arrays)  (0) 2023.12.01