ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 상속 개념과 사용법 그리고 super() 문으로 부모 인스턴스 초기화하는 방법
    IT/개발(자바, 서블릿, 스프링 등) 2019. 12. 9. 22:19

    클래스에서 필드와 메서드의 중복을 제거하는 방법? 상속을 이용한다.

     

    중복 제거 조건 1. 클래스 간의 공통 멤버를 가지는가?

    중복 제거 조건 2. is a 관계가 성립하는가?

     

    위 두가지 조건에 만족하면, 각 클래스의 중복을 제거할 수 있다.

     

    (예시)

    제거 조건 1. 사람이라는 공통점 존재.

    제거 조건 2. is a 관계 성립. Employee is a Person, Professor is a Person, Student is a Person.

    위 두가지 조건 만족하기 때문에 아래의 상속관계가 가능하다.

    Employee extends Person

    Professor extends Person

    Student extends Person

     

    Employee, Professor, Student 인스턴스가 생성될 때 부모 클래스의 생성자도 함께 호출된다. 어떤 클래스를 상속받은 클래스는 컴파일러가 소스 파일을 컴파일할 때 super() 문을 자동으로 생성한다. super()문은 상속받은 클래스의 모든 생성자 첫 번째 줄에 자동으로 추가된다. 생성자 내에 super()문을 사용하지 않았을 때만 자동으로 추가된다. this()는 자신의 다른 생성자를 호출할 때 사용한다. super()문은 부모 생성자를 호출할 때 사용한다.

     

    생성자에 대해서 정리하자면 이렇다.

    1. 모든 클래스는 생성자가 반드시 존재한다. 개발자가 명시하지 않으면 컴파일러가 디폴트 생성자를 생성한다.
    2. 자식 클래스의 모든 생성자에는 첫 번째 줄에 super() 문이 자동으로 추가된다. 단, 생성자에 super()문을 사용하지 않았을 때만 자동으로 추가된다.
    3. 따라서 자식 클래스의 인스턴스를 생성할 때 부모 클래스의 생성자도 함께 호출된다.

    super() 문을 이용한 부모 생성자의 활용 예제

    Person.java
    
    public class Person {
    	private String name;
        private int age;
        
        public Person(){
        	System.out.println("Person 생성자");
    	}
        
        public Person(String name, int age) {
        	this.name = name;
            this. age = age;
    	}
    }

     

    Employee.java
    
    public class Employee extends Person {
    	private String dept;
        
        public Employee(){
        	super();
            System.out.println("Employee 생성자");
    	}
        
        public Employee(String name, int age, String dept) {
        	super(name, age);
            this.dept = dept;
    	}
    }

     

Designed by Tistory.