OOP
[오브젝트] 15장 - 디자인 패턴 / 프레임워크
Donee
2024. 7. 21. 00:09
디자인 패턴 및 프레임 워크
디자인 패턴
- S/W 설계에서 반복되는 문제에 대해 적용할 수 있는 해결 방법
프레임워크
- 설계와 코드를 함께 재사용하기 위한 것
공통점
- 협력을 일관성 있게 제공하는 게 목적
차이점
- 디자인 패턴: 설계의 묶음
- 프레임 워크: 일관성 있는 협력을 제공하는 확장 가능한 코드
01. 디자인 패턴과 설계 재사용
- 패턴의 핵심은 정의가 아닌 뉘앙스를 이해하는 것
- 패턴의 핵심적 특징
- 패턴은 반복적 문제와 해법의 pair로 구성
- 패턴을 사용하여 다른 사람과 의사소통이 간단해짐
- 패턴은 실무에서 “발견된 것”
- 패턴은 다양한 context에서 사용되는 유용한 idea
패턴 분류
- 아키텍쳐 패턴
- s/w 전체 구조 결정에 사용
- 정의된 서브 시스템 제공, 각 서브 시스템의 책임 정의, 서브 시스템 관계간 규칙 및 가이드라인 포함
- 디자인 패턴
- 특정 context에서 설계 문제 해결
- 협력 컴포넌트 사이 반복적 구조를 서술
- 기타(분석 패턴, 이디엄 패턴)
패턴과 책임-주도 설계
- 객체 지향에서 책임과 협력을 결정하는 작업에는 많은 시간이 소요될 가능성이 높음
- 이때, 패턴은 공통으로 사용할 수 있는 역할, 책임, 협력이 Template화 되어 있음
- 이를통해 특정 상황에 적용 가능한 설계를 빠르게 적용할 수 있음
패턴은 출발점(Not 목적지)
- 패턴은 목적지가 아니기 때문에 맹목적으로 사용할 때 문제가 발생
- 패턴 사용의 이유가 설계의 문제점을 해결할 수 있는 좋은 해결책이 아닌, “특정 패턴을 경험해보고 싶기 때문” 될 수 있음
- 패턴 사용시 단순함 < 패턴의 복잡성을 통해 얻는 이득 일때만 사용해야 함
- 동료들이 해당 패턴에 익숙한지 여부를 확인해야 함
02. 프레임워크와 코드 재사용
디자인 패턴
- 재사용 가능한 설계의 idea를 제공하는게 목적
- 따라서, 특정 언어에 맞춘 가공이 필요한 게 단점
재사용 관점
- 설계 재사용 < 코드 재사용
- 기존 컴포넌트를 재조립해서 App을 구현할 수 있기 때문
- 그렇다고 해서 코드 재사용만 추종하기엔 그로인한 trade-off가 더욱 큼
- 따라서 코드 재사용 및 설계 재사용의 적절한 레벨을 사용해야 함
- 적절함의 기준은 X → But, 이에대한 가장 좋은 사례가 바로 framework
Framework
- 시스템 전체 or 일부를 구현한 재사용 가능한 설계
- ex. iOS 개발에선 UIKit framework
- 특정 화면을 만들기 위해선 기존 정의된 UIView를 상속받아 사용
- 특정 화면 및 동작을 위해선 기존 정의된 UIViewController를 상속받아 사용
- 재사용성을 위해 일관성 있는 협력 구조를 가짐
- 의존성을 추상화에 의존하고, 변경 가능한 것들을 캡슐화한 구조
- 하위모듈(변경 가능한 것) → 상위 모듈(변경될 가능성이 적은 것)
- 컴파일 관점에서 하위 모듈(변경 가능한 것)이 변해도 상위모듈은 re-compile되지 않음
- 상위 모듈이 변한다면, 당연히 그에 따른 하위 모듈또한 당연히 re-compile됨
제어 역전 원리
- 객체 지향 이전
- 상위 정책 → 구체적 세부사항에 의존
- app이 특정 toolkit, 라이브러리의 코드를 호출
- 객체 지향 이후
- 하위 모듈 → 상위 모듈
- framework는 일반적 해결책 제공, 구체적 동작은 app에서 확장
- app이 특정 framework를 호출하는 게 아닌, framework가 main program을 사용함
- 제어 주체가 framework가 됨
- ex. iOS에서 레이아웃 관련 코드들은 우리가 작성
- 하지만, 레이아웃 코드가 호출되는 것은 framework에서 제어함
제어 주체가 app → framework로 이동하여, 제어 흐름이 역전됨
결론
- 디자인 패턴은 설계를 재사용하는 것, 프레임워크는 설계 및 코드 재사용
- 패턴은 목적지가 아니기 때문에, 특정 상황에 적절한 패턴을 적용해야 함
- 적절한 코드 재사용 및 설계 재사용의 예시가 프레임워크
- 프레임워크는 일관성 있는 협력을 통해 추상화에 의존하는 의존성 역전의 구조를 지님