본문 바로가기

자바

자바 프로그래밍 - 생성자

생성자


>>> // 부모 클래스
>>> class Launch {
>>> 	String menu;
>>> 	
>>> 	void setMenu(String menu) {
>>> 		this.menu = menu;
>>> 	}
>>> }
>>>
>>> // 자식 클래스
>>> class Hamburger extends Launch {
>>> 	void eatBurger() {
>>> 		System.out.println("점심으로 " + menu + "먹었다.");
>>> 	}
>>> }

  아래는 객체를 생성했던 방법이다.

>>> Hamburger burger = new Hamburger();

이 객체에는 부모 클래스에서 받았던 String 자료형의 menu가 있는데 그대로 출력하면 어떻게 될까

>>> System.out.println(burger.menu)
null

burger 객체의 menu 변수에는 아무런 값도 설정해주지 않았고 기본값도 존재하지 않는다. 그렇기에 null값이 출력된다. 그렇다면 무조건 객체 변수의 값을 주어야 객체를 생성할 수 있게 해야하는 상황이 있을 수도 있다. 이때 생성자를 사용한다.

 

 

 

생성자 선언


>>> // 부모 클래스
>>> class Launch {
>>> 	String menu;
>>> }
>>>
>>> // 자식 클래스
>>> class Hamburger extends Launch {
>>> 	Hamburger(String menu) { // 생성자
>>> 		this.menu = menu;
>>> 	}
>>> 	
>>> 	void eatBurger() {
>>> 		System.out.println("점심으로 " + menu + "먹었다.");
>>> 	}
>>> }

  이제 Hamburger 클래스의 객체를 생성해보자.

>>> Hamburger burger = new Hamburger(); // 컴파일 오류
>>> Hamburger burger = new Hamburger("bigMac"); // 정상적으로 작동

  위의 자식 클래스에서 생성자를 추가해주었으므로 Hamburger 객체를 생성할 때 반드시 String 자료형의 값을 넣어주어야 한다. 그렇지 않으면 컴파일 오류가 발생한다. (생성자를 int형으로 만들었다면 int 자료형을 넣어주면 된다)

 

 

규칙


1. 클래스명과 메서드명(생성자)이 같다.

2. 리턴 타입을 정의하지 않는다.

3. 객체를 생성할 때 new 키워드에서 생성자가 호출되므로 ()(소괄호) 사이에 맞는 자료형의 값을 넣어준다.

 

 

디폴트 생성자


  클래스의 객체를 생성할 때 객체의 모든 변수들을 기본 값으로 초기화하는 과정이다. 기본적으로 사용되는 초기화 값은 아래 표와 같다.

정수(int, long...) 논리(boolean) 부동소수점(float, double) 객체(String)
0  false 0.0  null

  예시를 살펴보자

>>> public class Hamburger {
>>> 	private String menu;
>>> 	private int price;
>>> 	private boolean drink;
>>> 	
>>> 	// 별도의 생성자가 없다면 자동으로 디폴드 생성자가 생성
>>> }
>>>
>>> public static void main(String[] args) {
>>> 	Hamburger burger = new Hamburger();
>>> 	System.out.println(burger.menu);
>>> 	System.out.println(burger.price);
>>> 	System.out.println(burger.drink);
null
0
false

 

 

생성자 오버로딩


  메서드와 마잔가지로 입력 항목이 다른 생성자를 만들 수 있는데 이를 생성자 오버로딩이라고 한다.

>>> // 부모 클래스
>>> class Launch {
>>> 	String menu;
>>> }
>>>
>>> // 자식 클래스
>>> class Hamburger extends Launch {
>>> 	Hamburger(String menu) { // 생성자
>>> 		this.menu = menu;
>>> 	}
>>> 	Hamburger(int num) {  // 생성자 오버로딩
>>> 		if (num == 1) {
>>> 			this.menu = "bigMac";
>>> 		} else {
>>> 			this.menu = "burger";
>>> 		}
>>> 	
>>> 	void eatBurger() {
>>> 		System.out.println("점심으로 " + menu + "먹었다.");
>>> 	}
>>> }

  생성자를 String 외에 int 자료형으로 받게 할수도 있다. 이때 1이면 menu는 bigMac, 그 외엔 burger가 입력되게 된다.

 

 

(이 글은 위키독스 점프 투 자바와 chatgpt를 참고하였습니다)