[Java] 상속 (Is-A)과 컴포지션 (Has-A)
20 May 2022상속 (IS-A)과 컴포지션 (Has-A)
이펙티브 자바 item18에 들어가기 앞서, 상속과 컴포지션의 각각의 관계에 대한 개념을 정리하고자 한다. 상속과 컴포지션은 얼핏보면 비슷하지만, 관계에 따른 차이가 있습니다.
상속
IS-A 관계 (상속) : 하위 클래스가 상위 클래스의 특성을 재정의 한 것
- A is a B : A는 B이다로 표현이 가능한 관계를 말한다.
- EX) 손은 사람에게 포함된다, 다리는 사람에게 포함된다.
/**
* 부모 상속 객체
*/
public class Animal {
public String stringToAnimal() {
return "나는 동물입니다.";
}
}
/**
* 자식 상속 객체
*/
public class Dog extends Animal {
public String stringToDog() {
return "나는 개입니다. " + stringToAnimal();
}
}
나는 개입니다. 나는 동물입니다.
컴포지션
Has-A 관계 (포함) : 기존 클래스가 새로운 클래스의 구성요소가 되는 것
- A has a B : A가 B를 포함한다로 표현 가능한 관계를 말한다.
- EX) 개는 동물이다, 소는 동물이다.
/**
* 부모 컴포지션 객체
*/
public class Human {
Arm arm = new Arm();
public String stringToHuman() {
return "나는 사람입니다. " + arm.stringToArm();
}
}
/**
* 자식 컴포지션 객체
*/
public class Arm {
public String stringToArm() {
return "나는 팔을 가졌습니다.";
}
}
나는 사람입니다. 나는 팔을 가졌습니다.