Study/Java

[JAVA] 생성자

토기발 2022. 10. 10. 20:56

생성자(Constructor)

메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드

new 연산자와 함께 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체를 초기화해준다. 

객체 초기화란? : 객체를 선언하고 사용할 준비를 하는 것.

 

생성자의 특징

1. 반환값이 없어 return을 사용하지 않고, 반환 타입을 void형으로 선언하지 않는다.
2. 초기화를 위한 데이터를 인수로 전달받을 수 있다.
3. 객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있다.

    (생성자도 메소드이기에 오버로딩이 가능하다는 뜻)

 


기본 생성자(default constructor)

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

하지만 특별히 생성자를 정의하지 않고도 인스턴스를 생성할 수 있다.

이것은 자바 컴파일러가 기본 생성자(default constructor)라는 것을 기본적으로 제공해 주기 때문이다.

기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않다.

 

class Boong	{
	private String source = "민트초코";
	private int price = 1000;		
			String getBoong() {
				return this.source + "맛 붕어빵은" + this.price + "원 입니다.";
			}
}			
public class Sample{			
			public static void main(String[] args) {
				Boong boong = new Boong();
				System.out.println(boong.getBoong());
			}
		
}

예시로 생성자를 따로 만들지 않고 main에서 기본 생성자를 호출했다.

자바 컴파일러에서

클래스명(){}  (위 예제에서는 Boong(){} ) 

을 자동으로 만들었기 때문에 객체 초기화가 되었고 문제없이 코드가 동작할 수 있었다.

 

그런데 매개변수(parameter)가 있는 생성자를 하나라도 정의했다면 기본 생성자는 만들어지지 않는다.

 

이 경우에는 Boong 생성자에 매개변수가 들어갔기에 에러가 났다.

에러를 고치려면

 

이렇게 인자(argument)를 넣어주면 된다. 

 

 

 


 

생성자 오버로딩

 

위에 기입한 대로 생성자도 메소드이기에 오버로딩이 가능하다.

class Boong	{
			Boong(){}
			Boong(String source, int price) {}
			Boong(String source, String dough){}			
}

 

그러면 하기 방식으로 여러가지 인자를 넣어 호출할 수 있다.

 

public class Sample{			
			public static void main(String[] args) {
				Boong boong = new Boong();
				Boong boong1 = new Boong("민트초코", 1000);
				Boong boong2 = new Boong("민트초코", "밀가루");
			}	
}

 

 

 

참고출처:

http://www.tcpschool.com/java/java_methodConstructor_constructor

https://kephilab.tistory.com/47