『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다
프로그래밍 초보자에게 "상속"이라는 개념은 종종 가계도처럼 오해되곤 합니다. 아버지-아들, 할아버지-손자처럼 상속이 마치 가족관계처럼 전해지는 것이라 생각하기 쉽습니다. 그러나 객체지향에서 말하는 상속은 ‘재사용’과 ‘확장’의 개념으로 이해해야 올바릅니다.
잘못된 상속의 오해
일반적으로 다음과 같은 형태를 상속이라고 생각하기 쉽습니다:
할아버지
└─ 아버지
├─ 아들
└─ 딸
이건 객체지향에서의 상속이 아닙니다. 단순한 ‘혈연 관계’는 객체 간 기능 재사용이나 확장과는 전혀 관계가 없습니다.
올바른 상속의 예: 분류도 기반 이해
객체지향에서의 상속은 다음과 같이 종류-세부 종류로 나뉘는 분류도 형태에 가깝습니다.
동물
├─ 포유류
│ ├─ 고래
│ └─ 박쥐
└─ 조류
├─ 참새
└─ 펭귄
이 구조에서는 "포유류"가 "동물"의 속성을 상속하고, 그 포유류 안에서도 "고래"와 "박쥐"가 다시 속성을 확장하는 식입니다. 다시 말해, 상속은 상위 클래스의 공통된 기능을 하위 클래스가 물려받고, 그 위에 고유한 기능을 덧붙여 쓰는 것입니다.
상속은 재사용 + 확장이다
객체지향에서 상속을 사용할 때는 크게 두 가지 목적이 있습니다:
- 재사용 (Reuse): 이미 정의된 기능을 물려받아 다시 사용함
- 확장 (Extension): 기존에 없던 고유한 기능을 새롭게 덧붙임
예를 들어, Animal 클래스가 eat(), sleep() 메서드를 가지고 있다면, Dog 클래스는 이를 물려받고, bark() 같은 메서드를 확장해서 가질 수 있습니다.
class Animal {
void eat() { System.out.println("먹는다"); }
}
class Dog extends Animal {
void bark() { System.out.println("짖는다"); }
}
이 경우 Dog는 Animal의 eat()을 사용할 수 있고, 동시에 Dog만의 bark()도 추가로 가질 수 있습니다.
결론: 상속은 코드 재사용 수단이지, 가계도가 아니다
프로그래밍에서 상속은 혈연이나 계보가 아닙니다. 클래스 간의 공통 속성과 기능을 재사용하고, 필요 시 확장하는 구조입니다.
단순히 어떤 클래스가 다른 클래스보다 ‘상위’이기 때문에 무조건 상속해야 하는 것이 아닙니다.
'Spring > 스프링입문을 위한 자바객체지향의 원리와 이해' 카테고리의 다른 글
다형성 (0) | 2025.06.30 |
---|---|
is-a 관계, 진짜 맞는 말일까? 상속과 인터페이스의 차이 (0) | 2025.06.30 |
static 멤버 vs 인스턴스 멤버 (0) | 2025.06.30 |
추상화와 메모리 (0) | 2025.06.30 |
추상화는 모델링이다 (0) | 2025.06.30 |