Skip to Content
Suffering builds character

2.상속

객체 지향 설계에서 이야기하는 상속은 기본적으로 상속 관계에서 만족해야 할 조건이 있음

"하위 클래스(X)는 상위 클래스(Y)다." → X is Y

정리하면 상속 관계란 ~~ is A ~~ 관계라고 볼 수 있음

1. Child is a Parent, 자식은 부모다?

상속 관계를 부모 클래스(Parent), 자식 클래스(Child)로 표현하기도 하는데 이러한 표현은 상속 관계에서 만족시켜야할 조건과 매칭시키면 다소 맥락이 달라질 수 있음

가족 관계도 inheritance1

가족관계도를 상속 관계를 클래스로 작성 시 아래와 같이 표현할 수 있음

class Father { // 아버지 클래스 } class Son extends Father{ // 아들 클래스 }

이러한 클래스의 관계를 상속 관계에서 지켜야할 조건인 is A 관계와 매칭시켜보면,

"아들은 아버지다." "Son is A Father"

따라서 부모(Parent) 클래스 - 자식(Child) 클래스 보다는, 상위(Super) 클래스 - 하위(Sub) 클래스라고 표현하는 것이 권장됨

2. 추상화 - 구체화 정도

잘 설계된 클래스는 일반적으로, 상위 클래스로 올라갈수록 클래스의 개념은 추상화, 일반화되고, 하위 클래스로 내려갈수록 구체화, 특수화되는 경향이 있음

동물 분류도 inheritance2

이러한 설계대로 상속 관계에서 만족시켜야할 조건인 is A 관계를 매칭시켜보면,

부모 - 자식 관계로 생각할 경우,

"동물은 포유류의 부모?" - X "포유류는 고래의 부모?" - X

상속 관계로 생각할 경우,

"고래는 포유류다."(`Whale is a Mammal`) "박쥐는 포유류다."(`Bat is a Mammal`) "참새는 조류다."(`robin is a Birds`) "펭귄은 조류다."(`Penguin is a Birds`)

3. 상속(inheritance)? 확장(extends)?

상위 클래스(Super class)의 특성(멤버 필드, 멤버 메서드)을 하위 클래스(Sub class)에 상속(특성을 상속)하고, 이에 더해 하위 클래스가 독립적으로 필요한 특성을 추가, 확장(extends)해서 사용할 수 있다는 의미

정리하면, 객체 지향에서 보편적인 의미의 inheritance 개념은 상위 클래스의 특성을 재사용(Reuse) + 하위 클래스의 특성을 새롭게 확장(extends)

"상속" = "재사용"(`reuse`) + "확장"(`extends`)

동물 클래스

Animal.java
class Animal { int life; void move() { ... } }

쥐 클래스

Mouse.java
class Mouse extends Aniaml{ // Mouse 클래스는 Animal을 확장했다 // int life; // 별도로 작성하지 않아도 Animal에게 특성을 내려받음 String tail; // 쥐는 꼬리가 있음 }

코드 실행 클래스

public class Main { public static void main(String[] args) { Mouse m = new Mouse(); m.move(); } }
Last updated on