객체지향 프로그래밍(OOP)의 진정한 힘은 코드의 단순 재사용을 넘어선 ‘유연성’에 있다.
그 유연성을 지탱하는 두 기둥인 상속과 다형성의 메커니즘을 분석한다.
상속 (Inheritance): 구조적 확장
기존 클래스(부모)의 속성과 기능을 물려받아 새로운 클래스(자식)를 구축한다.
“is-a” 관계를 통해 논리적인 계층 구조를 형성하고 중복 코드를 제거한다.
다형성 (Polymorphism): 유연한 인터페이스
하나의 타입으로 다양한 객체를 제어할 수 있는 능력이다.
자바에서는 부모 타입 참조 변수로 실제 자식 객체의 오버라이딩된 메서드를 호출함으로써 구현된다.
Animal animal = new Dog(); // 부모 타입으로 자식 참조
animal.sound(); // 실행 시점에 객체 타입에 맞는 메서드 호출 (Dynamic Binding)
설계적 가치
- 유지보수성: 공통 로직을 한 곳에서 관리하여 수정을 용이하게 한다.
- 확장성 (OCP): 기존 코드를 수정하지 않고도 새로운 기능을 클래스 단위로 추가할 수 있다.
- 결합도 완화: 구체적인 구현보다 추상적인 인터페이스에 의존하게 만든다.
P.S
상속과 다형성은 복잡한 시스템을 관리 가능한 단위로 나누고 연결하는 핵심 기술이다.
객체 간의 협력 관계를 우아하게 설계하는 능력이 소프트웨어의 품질을 결정하는 것 같다.