디자인 패턴
- 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법
- 특정한 변경을 일관성 있게 다룰 수 있는 협력 템플릿을 제공
프레임워크
- 설계와 코드를 함께 재사용하기 위한 것
- 특정한 변경을 일관성 있게 다룰 수 있는 확장 가능한 코드 템플릿을 제공
디자인 패턴과 설계 재사용
소프트웨어 패턴
- 반복적으로 발생하는 문제와 해법의 쌍으로 정의
- 이미 알려진 문제와 이에 대한 해법을 문서로 정리할 수 있으며, 이 지식을 다른 사람과 의사 소통 할 수 있음
- 추상적인 원칙과 실제 코드 작성 사이의 간극을 메워주며 실질적인 코드 작성을 도움
- 패턴은 실무에서 탄생함
- 하나의 실무 컨텍스트에서 유용한 동시에 다른 실무 컨텍스트에서도 유용할 것이라고 예상되는 아이디어
패턴 분류
- 패턴의 범위나 적용 단계에 따라 아키텍처 패턴, 분석 패턴, 디자인 패턴, 이디엄의 4가지로 분류
- 아키텍처 패턴(Architecture Pattern)
- 소프트웨어의 전체적인 구조를 결정하기 위해 사용
- 미리 정의된 서브시스템들을 제공하고, 각 서브시스템들의 책임을 정의하며, 서브시스템들 사이의 관계를 조직화하는 규칙과 가이드라인을 포함
- 디자인 패턴(Design Pattern)
- 특정 정황 내에서 일반적인 설계 문제를 해결하며, 협력하는 컴포넌트들 사이에서 반복적으로 발생하는 구조를 서술
- 중간 규모의 패턴으로, 특정한 설계 문제를 해결하는 것을 목적으로 하며, 프로그래밍 언어나 프로그래밍 패러다임에 독립적임
- 이디엄(Idiom)
- 특정 프로그래밍 언어에만 국한된 하위 레벨 패턴으로, 주어진 언어의 기능을 사용해 컴포넌트, 혹은 컴포넌트 간의 특정 측면을 구현하는 방법을 서술함
- 언어에 종속적이기 때문에 특정 언어의 이디엄이 다른 언어에서는 무용지물이 될 수 있음
- 분석 패턴(Analysis Pattern)
- 도메인 내의 개념적인 문제를 해결하는데 초점을 맞춤
- 업무 모델링 시에 발견되는 공통적인 구조를 표현하는 개념들의 집합
패턴과 책임-주도 설계
- 패턴은 반복적으로 발생하는 문제를 해결하기 위해 사용할 수 있는 공통적인 역할, 책임, 협력의 템플릿
- 특정한 상황에 적용 가능한 패턴을 알고 있다면 책임 주도 설계의 절차를 하나하나 따르지 않고도 객체들의 역할과 책임, 협력 관계를 손쉽게 구성할 수 있음
캡슐화와 디자인 패턴
- 각 디자인 패턴은 특정한 변경을 캡슐화하기 위한 독자적인 방법을 정의
- 특정한 변경을 캡슐화함으로써 유연하고 일관성 있는 협력을 설계할 수 있는 경험을 공유하는 것
패턴은 출발점이다
- 디자인 패턴이 현재의 요구사항이나 적용 기술, 프레임워크에 적합하지 않다면 목적에 맞게 수정하라
- 패턴을 맹목적으로 따르면 불필요하게 복잡하고, 난해하며, 유지보수하기 어려운 시스템을 만들게 됨
- 패턴이 현재의 문제에 딱 들어맞지 않는다고 해도 참조할 수 있는 모범적인 역할과 책임의 집합을 알고 있는 것은 큰 도움이 됨
프레임워크와 코드 재사용
코드 재사용 대 설계 재사용
- 디자인 패턴
- 프로그래밍 언어에 독립적으로 재사용 가능한 설계 아이디어를 제공하는 것을 목적으로 함
- 언어에 종속적인 구현 코드를 정의하지 않기 때문에 디자인 패턴을 적용하기 위해서는 프로그래밍 언어의 특성에 맞춰 가공 하고 구현 코드를 재작성해야 함
- 프레임 워크
- 구조적인 측면 : 추상 클래스나 인터페이스를 정의하고 인스턴스 사이의 상호작용을 통해 시스템 전체 혹은 일부를 구현해 놓은 재사용 가능한 설계
- 코드와 설계의 재사용 : 애플리케이션 개발자가 현재의 요구사항에 맞게 커스터마이징 할 수 있는 애플리케이션의 골격
상위 정책과 하위 정책으로 패키지 분리하기
- 상위 정책은 상대적으로 변경에 안정적이지만 세부 사항은 자주 변경 됨
- 상위 정책이 세부 사항에 비해 다양한 상황에서 재사용될 가능성이 높음
- 변하는 부분과 변하지 않는 부분을 별도의 패키지로 분리하자
- 의존성 역전 원리에 따라 추상화에만 의존하도록 패키지 사이의 의존성의 방향을 조정하자
제어 역전 원리
- 의존성을 역전시키면 제어 흐름의 주체 역시 역전됨
- 훅(hook) : 프레임워크에서는 일반적인 해결책만 제공하고 애플리케이션에 따라 달라질 수 있는 특정한 동작은 비워둠
- 프레임워크가 적절한 시점에 실행할 것으로 예상되는 코드를 작성하면 프레임워크가 해당 코드를 호출해 줌
- 제어의 역전은 프레임워크의 핵심 개념인 동시에 코드의 재사용을 가능하게 하는 힘이다
'책 > Object' 카테고리의 다른 글
일관성 있는 협력 (0) | 2020.09.01 |
---|---|
서브클래싱과 서브타이핑 (0) | 2020.08.25 |
다형성 (0) | 2020.08.10 |
합성과 유연한 설계 (0) | 2020.07.27 |
상속과 코드 재사용 (0) | 2020.07.27 |