본문 바로가기

OOP/<헤드 퍼스트 디자인 패턴>, 에릭 프리먼 외16

Decorator 핵심 의도 데코레이터 패턴으로 객체에 추가 요소를 실행 중에 동적으로 더할 수 있다. 데코레이터를 사용하면 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있다. 적용 상황 감싸고 있는 객체에 행동을 추가하거나 위임하는 용도로 만들어진다. 예를 들어 문자열을 다양한 방법으로 출력하고 싶을 때 사용할 수 있다. 문장 앞에 줄번호를 붙이거나, 소문자로 바꾸어 출력하거나, 박스로 감싸서 출력할 수 있다. 이때 문자열은 감싸지는 객체이고 추가하는 행동은 데코레이터의 책임이다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 어떤 객체와 상호작용하는 다른 객체들은 그 객체의 장식의 유무와 상관없이 그 객체에게 메시지를 보낸다. 데코레이터에게도 원래 객체와 동일한 메시지 요청이 오므로, 이 메시지.. 2023. 2. 24.
Observer 핵심 의도 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의하는 패턴이다. 신문 구독 매커니즘과 유사하다! 신문사는 사업을 시작하고 신문을 찍어낸다. 독자가 구독 신청을 하면 새로운 신문이 나올 때마다 배달을 받을 수 있다. 신문을 더 이상 보고 싶지 않으면 구독 해지 신청을 한다. 옵저버 패턴에서는 신문사를 Subject, 구독자를 Observer라고 부른다. 적용 상황 특정 상태의 쓰기와 읽기 책임이 명확하게 분리되는 경우 사용할 수 있다. 특히 쓰기는 한 곳에서 발생하는데 읽기는 여러 곳에서 발생하면 의존 관계를 더 유연하게 구성할 수 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 상태를 저장하고 제어(w.. 2023. 2. 24.
Strategy 핵심 의도 전략 패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해 쓸 수 있게 한다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 적용 상황 어떤 객체의 행동에 대해서, 구체적인 구현 방법을 실행 중에 변경하고 싶을 때 사용한다. 예를 들어 계산기의 덧셈 기능에 대해 일반 계산기에 대해서는 누적합을 구하는 방식으로 덧셈을 하도록 하고, 공학 계산기에 대해서는 가우스 합을 구하는 방식으로 덧셈을 하도록 하고 싶을 때 사용할 수 있다. 솔루션의 구조와 각 요소의 역할 객체에게 책임을 분할하기 어떤 행동을 할 수 있는 Context 객체가 존재한다. 이 객체는 각 행동에 대해 클라이언트가 원하는 방식으로 행동할 수 있어야 한다. 그러려면 클라이언트가 원.. 2023. 2. 24.
공부 방법 설정 2023. 2. 24.