- Today
- Total
목록스터디/디자인 패턴 (23)
작심삼일
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 다른 객체에 대한 접근을 제어하기 위한 대리자 또는 자리채움자 역할을 하는 객체를 둡니다. Remote proxy: 객체가 다른 주소 공간에 존재한다는 사실을 숨길 수 있습니다. Virtual proxy: 요구에 따라 객체를 생성하는 등 처리를 최적화할 수 있습니다. Protection proxy & Smart reference: 객체가 접근할 때마다 추가 관리를 책임집니다. 객체를 생성할 것인지 삭제할 것인지를 관리합니다. 어떻게 쓰는가 Proxy: 실제로 참조할 대상에 대한 참조자를 관리합니다. Subject와 동일한 인터페이스를 제공하여 실제 대상을 대체할 수..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 구현에서 추상을 분리하여, 이들이 독립적으로 다양성을 가질 수 있도록 합니다. 구현이 인터페이스에 얽매이지 않게 됩니다. 구현 세부 사항을 사용자에게서 숨길 수 있습니다. 어떻게 쓰는가 Abstraction: 추상적 개념에 대한 인터페이스를 제공하고 객체 구현자에 대한 참조자를 관리합니다. RefinedAbstraction: 추상적 개념에 정의된 인터페이스를 확장합니다. Implementor: 구현 클래스에 대한 인터페이스를 제공합니다. ConcreteImplementor: Implementor 인터페이스를 구현하는 것으로 실제적인 구현 내용을 담았습니다. 어디서 ..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 객체 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 만듭니다. 어떻게 쓰는가 Subject: 감시자들을 알고 있는 주체. 감시자 객체를 붙이거나 떼는 데 필요한 인터페이스 제공 Observer: 주체에 생긴 변화에 관심 있는 객체를 갱신하는 데 필요한 인터페이스를 정의 ConcreteSubject: ConvreteObserver 객체에게 알려주어야 하는 상태를 저장. 상태가 변경될 때 감시자에게 알림 ConcreteObserver: ConcreteSubj..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 한 집합에 속해있는 객체의 상호작용을 캡슐화하는 객체를 정의합니다. 객체들이 직접 서로를 참조하지 않도록 하여 객체 사이의 소결합(loose coupling)을 촉진시키며, 개발자가 객체의 상호작용을 독립적으로 다양화시킬 수 있게 만듭니다. 어떻게 쓰는가 Mediator: Colleague 객체와 교류하는 데 필요한 인터페이스를 정의합니다. ConcreteMediator: Colleague 객체와 조화를 이뤄서 협력 행동을 구현하며, 자신이 맡을 동료(colleague)를 파악하고 관리합니다. Colleagues: 자신의 중재자 객체가 무엇인지 파악합니다. clas..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스(관리자)를 제공하는 패턴으로, 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의합니다. 사용자가 다루어야할 객체의 수가 줄어들며, 서브시스템을 쉽게 사용할 수 있다. 서브시스템과 사용자 코드 간의 결합도를 약하게 만든다. 어떻게 쓰는가 Facade: 단순하고 일관된 통합 인터페이스를 제공하며, 서브세스템을 구성하는 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 사용자의 요청을 해당 서브시스템 객체에 전달합니다. 서브시스템 클래스들: 서브시스템의 기능을 구현하고, Facade 객..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 합니다. 제품에 대한 내부 표현을 다양하게 변화할 수 있다. 생성과 표현에 필요한 코드를 분리한다. 복합 객체를 생성하는 절차를 좀더 세밀하게 나눌 수 있다. 어떻게 쓰는가 Builder: Product 객체의 일부 요소들을 생성하기 위한 추상적인 인터페이스를 정의 ConcreteBuilder: Builder 클래스에 정의된 인터페이스를 구현하며, 제품의 부품들을 모아 빌더를 복합 Director: Builde..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 캡슐화를 위배하지 않은 채 어떤 객체의 내부 상태를 잡아내고 실체화시켜 둠으로써, 이후 해당 객체가 그 상태로 되돌아올 수 있도록 합니다. 객체의 상태를 저장해둔 후 복원해야할 때 사용한다. 캡슐화된 경계를 유지할 수 있다. Originator 클래스가 많은 양의 정보를 저장해야 할 때나 상당히 자주 메멘토를 반환해야 할 때라면 상당한 오버헤드를 가져올 수 있다. 어떻게 쓰는가 Memento: 원조본 객체의 내부 상태를 저장합니다. Originator: 원조본 객체 Caretaker: 메멘토의 보관을 책임지는 보관자 class Memento: def __init__..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 요청 자체를 캡슐화하는 것입니다. 이를 통해 요청이 서로 다른 사용자를 매개변수로 만들고, 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원합니다. 이미 구현된 기능을 사용하는 것이기 때문에 의존성이 없지만, 모든 기능을 구현해야한다는 단점이 있다. 어떻게 쓰는가 Command: 연산 수행에 필요한 인터페이스를 선언합니다. ConcreteCommand: Receiver 객체와 액션 간의 연결성을 정의합니다. Client: ConcreteCommand 객체를 생성하고 처리 객체로 정의합니다. Invoker: 명령어에 처리를 수행할 것을 요청합니다. Recei..