1 분 소요

head first design patterns에서 소개된 디자인패턴을 압축 요약 정리하는 포스트입니다.

  • 스트래티지 패턴 (Strategy)
    • 일명 전략 패턴
    • 로직을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
      로직을 사용하는 클라이언트와 독립적으로 로직을 변경이 가능하다.
  • 스테이트 패턴 (State)
    • 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 정의할 수 있다.
      클래스가 바뀌는 효과를 낸다.
      (실제로 클래스가 바뀌진 않는다 스트래티지 패턴하고의 가장 큰 차이점이다)
  • 옵저버 패턴 (Observer)
    • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다.
      • ex) 구독 시스템
        어떤 정보가 바뀌면 해당 블로그를 구독하는 사람들에게 연락이 가는 것 또는 정보가 전해 지는 것이라 생각하면 된다.
  • 데코레이터 패턴 (Decorator)
    • 객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터 패턴을 사용 시 서브클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다.
      (추상적으로 구현한 형식의 코드에서만 정상적인 적용이 가능하다) - 이 부분은 확인 중입니다.
  • 팩토리 메서드 패턴 (Factory Methos)
    • 객체를 생성하기 위한 인터페이스를 정의합니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다.
  • 추상 팩토리 패턴 (Abstract Factory)
    • 인터페이스를 이용하여 서로 연관, 의존 객체를 구현 클래스로 지정하지 않고 생성할 수 있습니다.
  • 싱글턴 패턴 (Singleton)
    • 해당 클래스의 인스턴스가 하나만 생성되고 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴
  • 커맨드 패턴 (Command)
    • 요구사항(정보)을 객체로 캡슐화할 수 있으며 매개변수를 써서 여러 가지 다른 요구사항을 집어넣을 수도 있습니다.
      또한 요청내역을 큐에 저장하거나 로그로 기록할 수 있으며 작업 취소 기능도 지원합니다.
  • 어댑터 패턴 (Adapter)
    • 클래스의 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다.
      인터페이스가 호환되지 않아 쓸 수없었던 클래스들을 같이 사용할 수 있게 해 줍니다.
  • 퍼사드 패턴 (Facade)
    • 서브시스템에 있는 일련의 인터페이스에 대한 통합 인터페이스를 제공합니다.
      퍼사드 패턴에서는 서브시스템을 더 쉽게 사용할 수 있게 해주는 고수준 인터페이스(최상위 인터페이스라생각하면 될 것 같습니다)를 정의합니다.
  • 템플릿 메서드 패턴 (Template Method)
    • 어떤 작업(로직)을 골격을 정의합니다 일부 단계에서는 서브클래스에서 구현하도록 할 수 있습니다.
      템플릿 메서드를 이용하면 로직의 구조는 유지하면서 특정 단계만 서브클래스에서 새로 정의할 수 있습니다.
  • 이터레이터 패턴 (Iterator)
    • 컬렉션 구현 방법을 노출시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공합니다.
  • 컴포지트 패턴 (Composite)
    • 객체들을 트리구조로 구성하여 부분 객체와 전체를 나타내는 계층구조로 만들 수 있습니다.
      클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체를 똑같은 방식으로 사용할 수 있게 합니다.
  • 프록시 패턴 (Proxy)
    • 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체로 제공하는 패턴
      다른 객체를 대변하는 객체를 만들어서 주 객체에 대한 접근을 제어합니다.

댓글남기기