Intro

이 글은 자바의 상속과 포함 관계에 대해서 다룹니다.


상속이란?

상속이란 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.

즉, 두 클래스를 조상과 자손으로 관계를 맺어주는 것이라 볼 수 있다.(is-a 관계)

상속 관계를 만들기 위해서는 extends를 사용한다.

특징

  • 자손은 조상의 모든 멤버를 상속 받는다.(생성자, 초기화 블록 제외)

  • 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.)

  • 공통 부분은 조상에서 관리하고, 개별 부분은 자손에서 관리한다.

  • 부모 클래스에서의 변경 및 수정은 자식 클래스에 영향을 주지만, 자식 클래스에서의 변경 및 수정은 부모 클래스에 영향을 주지 않는다.

  • 자바는 클래스의 관계에서 단일 상속만을 허용한다.

 

테스트 코드

package javainput;

class Parents {
    
    int data = 10;
    String str = "Hello";
    char a = 'A';
}


public class Child extends Parents{

    int data = 11;
    String str = "Nice to meet you!";
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Child c = new Child();
        System.out.println(c.data);
        System.out.println(c.str);
        System.out.println(c.a);
    }

}

출력 결과

11
Nice to meet you!
A

출력 결과에서 볼 수 있듯이 자식 클래스에는 char a가 선언되어 있지 않지만, 부모 클래스에서 선언하고 할당한 값이 그대로 출력된다는 것을 확인할 수 있다.


포함이란?

포함은 상속과 다르게 한 클래스가 다른 클래스의 객체를 자신의 멤버 변수로 포함하는 관계를 의미한다.(has-a 관계)

특징

  • 포함 관계는 기존 클래스의 기능을 재사용하면서도, 더 높은 유연성을 제공
  • 객체 간 의존성을 느슨하게 유지
  • 포함 관계에서는 포함된 객체의 기능을 사용하는 방식으로 동작을 구현

 

테스트 코드

class Toy {
    
    int data = 10;
    String str = "Hello";
    
    public void play() {
        System.out.println("hahaha!");
    }
}


public class Child {

    int data = 11;
    String str = "Nice to meet you!";
    
    Toy toy;
    
    Child(){
        this.toy = new Toy();
    }
    
    public void enjoy() {
        toy.play();
        System.out.println("I'm Happy!");
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Child child = new Child();
        child.enjoy();
    }

}

출력결과

hahaha!

I’m Happy!


 정리

특징 상속(Inheritance) 포함(Composition)
관계 is-a (A는 B이다) has-a (A는 B를 가지고 있다)
재사용성 부모 클래스의 속성과 메서드를 상속받아 재사용 다른 클래스의 객체를 포함하여 재사용
유연성 부모-자식 관계가 고정적이며 덜 유연함 느슨한 결합으로 더 유연한 구조 제공
다중 관계 단일 상속만 지원 다중 포함 가능
구현 방식 extends 키워드로 클래스 확장 클래스 내에 다른 클래스 객체를 멤버로 포함
결합도 높은 결합도 낮은 결합도
예제 관계 Student extends Person Car has Engine

태그:

카테고리:

업데이트:

댓글남기기