상속은 IS-A관계에서 사용하는 것이 가장 효율적이다.
IS-A 관계(is a relationship, inheritance)는 일반적인 개념과 구체적인 개념의 관계입니다.
사람은 동물이다.
소는 동물이다
새는 동물이다.
위와 같은 관계를생각하자. 즉, 일반 클래스를 구체화 하는 상황에서 상속을 사용한다.
상속을 사용하면 많은 장점이 있지만, 하위 클래스가 상위 클래스에 종속되기 때문에 이질적인 클래스 간에는 상속을 사용하지 않는 것이 좋다. 단순히 코드를 재사용할 목적으로 서로 관련이 없는 개념의 클래스를 상속 관계로 사용하는 것은 추천되는 방식이 아니다.
예시 코드
public class Human extends animal{
boolean canFly;
int life;
Human(boolean canFly,int life){
this.canFly = canFly;
this.life = life;
}
}
HAS-A 관계에서는 상속을 사용하지 않는다.
HAS-A 관계(has a relationship, association)는 일반적인 포함 개념의 관계이다.
대부분 IS A 가 성립하지않은경우 HAS A 일 가능성이 크다.
HAS-A 관계는 다른 클래스의 기능(변수 혹은 메서드)을 받아들여 사용한다.
ex) 메모리는 컴퓨터이다?->
Memory is Computer? 😵Nope
Computer has Memory ? 🤝Good
예시 코드
public class Computer{
public static void main(String[] args){
Memory memory = new Memory();
memory.run();
}
}