기본 패턴
java
class Animal {
void speak() {
System.out.println("...");
}
}
class Dog extends Animal {
@Override
void speak() {
System.out.println("woof");
}
}설명
- 상속은 기존 클래스의 상태와 동작을 이어받아 더 구체적인 클래스를 만드는 방식입니다. 하지만 단순한 코드 재사용 도구로만 보면 오히려 과도하게 쓰기 쉽습니다.
- 진짜 중요한 개념은 다형성입니다.
Animal a = new Dog();처럼 상위 타입 참조로도 하위 객체를 다룰 수 있고, 실제 호출은 런타임 타입에 맞는 메서드가 선택됩니다. @Override는 단순한 장식이 아니라, 의도한 메서드 재정의가 맞는지 컴파일러가 검증하게 해 주는 중요한 안전장치입니다.- 상속은 "is-a 관계"가 분명할 때 잘 맞습니다. 단순히 코드 몇 줄을 재사용하고 싶다는 이유만으로 상속을 쓰기 시작하면 클래스 계층이 금방 왜곡됩니다.
- 실무에서는 상속보다 조합을 더 선호하는 경우도 많습니다. 그래서 이 카드는 상속을 배우되, 언제 과해지는지도 함께 보는 것이 중요합니다.
빠른 정리
| 개념 | 의미 |
|---|---|
extends | 부모 클래스를 상속 |
| override | 부모 메서드를 다시 구현 |
| 다형성 | 상위 타입으로 하위 객체를 다룸 |
| 장점 | 공통 계약과 동작 재사용 |
| 주의점 | 단순 재사용 목적 상속은 구조를 왜곡할 수 있음 |
주의할 점
상속을 "코드 복붙 줄이기" 용도로만 쓰기 시작하면 클래스 계층이 쉽게 부자연스러워집니다. 관계가 진짜 is-a인지, 아니면 조합이 더 자연스러운지를 먼저 보세요.
참고 링크
3 sources