유난스런 개발 기록

[JAVA] Day-16 _ super() 생성자 (super constructor) 본문

개념정리/JAVA

[JAVA] Day-16 _ super() 생성자 (super constructor)

yourhwan 2023. 2. 1. 00:12

day-16

super() 생성자 (super constructor)


super() 생성자 란? 

  • 같은 클래스에 있는 다른 생성자를 호출할 때 사용하는 this() 처럼
  • 상속에서 부모 클래스의 생성자를 호출할 때는 super()를 사용한다.
  • super() 는 부모 클래스의 기본 생성자를 의미한다.
  • 부모클래스의 기본 생성자는 생략하더라도 무조건 호출 되어진다.

 

코드블럭 안의 코드를 통해 확인해보자.

 

부모 클래스의 생성자

ckage my.day16.b.superConstructor;

public class Parent {

	// field
	String id;
	String passwd;
	
	// 부모클래스의 기본 생성자
	public Parent() {
		id = "eomjh";
		passwd = "1234";
		System.out.println(">>> 확인용 Parent 클래스의 기본생성자 호출함 <<< ");
	}
	
}

부모 클래스의 경우 필드를 생성해준 후, 기본 생성자를 만들어 값을 넣어주었다.

이후 부모 생성자가 자식 생성자보다 무조건 먼저 호출되는 것을 확인하고자 

확인용 문장을 넣어줬다.

 

자식 클래스의 생성자

package my.day16.b.superConstructor;

public class Child extends Parent {

	// field
	String name;

	// 기본생성자
	public Child() {
	//	super();	// super() 는 부모클래스의 기본생성자를 말하는 것이다.
					// 부모클래스의 기본생성자를 생략하더라도 무조건 호출 되어진다.
		
		name = "엄정화";
		System.out.println("=== 확인용 Child 클래스의 기본생성자 호출함 ===");

	}// end of public Child()--------------------------
	
	
	// method
	void ChildInfo() {
		
		System.out.println("아이디 : " + super.id + "\n"
						  +"암호 : " + this.passwd + "\n"
						  +"성명 : " + this.name);
	}
	
	
	
}

자식 클래스는 extends 를 통해 부모 클래스를 상속 받았다.

때문에 자식 클래스의 기본 생성자를 선언 후 부모 클래스의 기본 생성자를 호출해주었다.

주석 처리를 한 이유는, 부모 클래스의 기본 생성자를 생략하더라도 무조건 호출되는 것을 확인하기 위함이다.

id 값은 this.id 로 선언할 수 있지만 현재 클래스에서는 굳이 써주지 않아도 헷갈일 일이 없어 생략했다.

이후 부모 클래스의 기본 생성자 값과 자식 클래스의 기본 생성자 값을 넣어 출력해주는 메소드를 생성했다.

 

메인 클래스

package my.day16.b.superConstructor;

public class MainTest {

	public static void main(String[] args) {

		
		Child child = new Child();
		/*
		 	>>> 확인용 Parent 클래스의 기본생성자 호출함 <<< 
			=== 확인용 Child 클래스의 기본생성자 호출함 ===
		 */
		
		
		// 자식클래스(Child)의 기본생성자가 호출되어질 때는
		// 항상 부모클래스(Parent)의 기본생성자가 먼저 호출되어지고 나서 그 다음에 자식클래스(Child)의 기본생성자가 호출되어진다.
		
		
		child.ChildInfo();
		/*
		  	아이디 : eomjh
			암호 : 1234
			성명 : 엄정화
		 */
	}

}

메인 클래스에선 부모 클래스와 자식 클래스에서 작성한 코드를 실행시켜줄 것이다.

메인 클래스에 child 객체를 생성하고 Child 클래스의 메소드를 호출하면

우리가 알아보고자 했던 super() 생성자가 어떻게 동작하는지 알 수 있다.

 

가장 먼저 확인용 Parent 클래스의 기본 생성자

즉, 부모 클래스의 기본 생성자가 호출되는 것을 확인할 수 있다.

그리고 메소드 또한 부모 클래스로 부터 상속 받아 사용한 필드들이 문제 없이 제 역할을 하는 것도 볼 수 있다.