객체 지향 설계에서 조합 vs 상속의 활용: PHP 프레임워크 사례 분석
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
PHP 프레임워크 개발자, 객체 지향 프로그래밍 학습자
난이도: 중간 (기본적인 OOP 개념 이해 필요)
핵심 요약
- 상속은 단일 클래스 간 관계를 정의하며, 코드 재사용성과 DRY 원칙을 지원
- 조합은 다른 클래스 인스턴스를 포함하여 유연성과 테스트 가능성을 높임
- Slim은 PSR-11 호환 컨테이너를 통해 조합 기반 의존성 주입 구현
- Laravel은 인터페이스 기반 상속과 조합을 병행하여 모듈성과 확장성을 달성
섹션별 세부 요약
1. 상속의 개념 및 PHP 적용
- 상속은 부모 클래스의 속성/메서드를 자식 클래스가 재사용 가능
- PHP에서 단일 상속 지원, Traits로 다중 상속 시뮬레이션 가능
- PSR-3 인터페이스를 구현한
AbstractLogger
클래스를 기반으로Logger
확장 - HTTP 예외 클래스(
HttpException
,HttpForbiddenException
)는 공통 로직 재사용을 위해 상속 사용
2. 조합의 개념 및 이점
- 조합은 "has-a" 관계를 통해 다른 클래스 인스턴스를 포함하여 기능 조합
- 의존성 주입(DI)을 통해 조합 구현, PSR-11 호환 컨테이너(PHP-DI, Symfony DI 등) 지원
- 조합은 유연성과 테스트 가능성을 높이고, 변경에 대한 영향 범위 최소화
3. Slim 프레임워크 사례
FastRouteDispatcher
는GroupCountBased
클래스를 상속 (PSR-11 호환)GroupCountBased
클래스는 @final 어노테이션으로 확장 제한 (PHP의final
키워드 미사용)- 다형성 활용:
GroupCountBased
와FastRouteDispatcher
가 동일한 메서드를 다르게 구현
4. Laravel 프레임워크 사례
Application
클래스는Container
를 상속하여 DI 컨테이너 기능 확장ContainerContract
인터페이스는 PSR-11 ContainerInterface 확장, Laravel 전용 기능 추가PasswordBroker
클래스는 조합을 통해UserProvider
의존성 주입, 테스트 용이성 제공
결론
- 상속은 코드 재사용성과 DRY 원칙을 지원하지만, 조합은 유연성과 테스트 가능성을 제공
- PHP 프레임워크는 PSR 표준과 인터페이스 기반 설계를 통해 확장성과 호환성 달성
- 실제 개발에서는 조합을 통해 의존성 주입을 적용하고, 상속은 인터페이스 정의에 집중하는 것이 효과적