생성 패턴 (Creational Patterns)
생성 패턴은 객체 생성과 관련된 문제를 해결합니다.

싱글턴 패턴 (Singleton Pattern): 클래스의 인스턴스가 하나만 생성되도록 보장.
팩토리 메서드 패턴 (Factory Method Pattern): 객체 생성을 서브클래스에 위임.
빌더 패턴 (Builder Pattern): 복잡한 객체를 단계별로 생성합니다.

  • 생성자의 인수가 너무 길고 복잡할때 이를 보완.
  • method chaining 과 함께 사용


프로토타입 패턴 (Prototype Pattern): 기존 객체를 복제하여 새 객체를 생성합니다.

  • python deepcopy()


구조 패턴 (Structural Patterns)

구조 패턴은 클래스나 객체의 구성을 단순화하고 확장성을 높입니다.

어댑터 패턴 (Adapter Pattern): 호환되지 않는 인터페이스를 변환하여 함께 작동하게 합니다.

  • 바꾸기 힘든 레거시를 품은 새로운 클래스 만들어서 기존 구조와 통합


브리지 패턴 (Bridge Pattern): 구현부에서 추상화를 분리하여 독립적으로 변화할 수 있게 합니다.

  • 잘 안쓰는듯? abstract 와 interface 사이에 다르를 놓는것 같은데..


컴포지트 패턴 (Composite Pattern): 객체들을 트리 구조로 구성하여 부분-전체 계층을 표현합니다.

  • 단일요소와 집합요소를 모두 같은 부모를 상속 받도록 해서 복잡한 트리구조도 단일 개체로 표현가능
  • Folder와 File이 모두 Unit이라는 부모를 상속받도록 하는 것 생각


데코레이터 패턴 (Decorator Pattern): 객체에 동적으로 새로운 책임을 추가합니다.
퍼사드 패턴 (Facade Pattern): 복잡한 시스템에 대한 간단한 인터페이스를 제공합니다.

  • 이건 그냥 복잡한 단계를 하나의 API로 묶어서 단순화 하는 개념.


플라이웨이트 패턴 (Flyweight Pattern): 공유를 통해 대량의 객체를 효율적으로 지원합니다.
프록시 패턴 (Proxy Pattern): 다른 객체에 대한 대리자나 플레이스홀더 역할을 합니다.

  • 준비시간이 오래걸리는 프린터 앞에 버퍼프린터 대리자로 모아서 처리하는거 생각하면 됨


행동 패턴 (Behavioral Patterns)
행동 패턴은 객체 간의 책임과 알고리즘을 관리합니다.

책임 연쇄 패턴 (Chain of Responsibility Pattern): 요청을 객체의 체인을 통해 전달합니다.
명령 패턴 (Command Pattern): 요청을 객체로 캡슐화합니다.

  • 행동도 객체화 할수 있다는 것(포토샵 액션 리스트 생각)


해석자 패턴 (Interpreter Pattern): 문법 규칙을 클래스로 표현합니다.

  • 컴파일러 비슷한일 할때, 클래스로 처리


반복자 패턴 (Iterator Pattern): 컬렉션의 요소를 순회하는 방법을 제공합니다.
중재자 패턴 (Mediator Pattern): 객체 간의 상호작용을 캡슐화하여 객체들이 직접 참조하지 않도록 합니다.
메멘토 패턴 (Memento Pattern): 객체의 상태를 캡쳐하고 복원합니다.
감시자 패턴 (Observer Pattern): 객체 간의 일대다 의존성을 정의합니다.

  • 구독하면 알림보내는거 생각하면됨. 이벤트일 필요없고 콜백도 가능


상태 패턴 (State Pattern): 객체의 내부 상태에 따라 행동을 변경합니다.

  • 상태를 객체로 표현하여, 조건문처리를 단순화 한다.


전략 패턴 (Strategy Pattern): 알고리즘을 캡슐화하여 상호 교체 가능하게 합니다.

  • 암것도 아님. 추상화를 통해 sum()등의 행동을 갈아 끼울 수 있다는 것.


템플릿 메서드 패턴 (Template Method Pattern): 알고리즘의 구조를 정의합니다.
방문자 패턴 (Visitor Pattern): 객체 구조에 새로운 연산을 추가합니다.

  • 데이터와 행동을 클래스 분리. 이렇게 하면 행동의 추가 확장이 편해짐(sum, avg등)
반응형

'Programming' 카테고리의 다른 글

yaml  (0) 2024.03.02
라즈베리파이 초기 세팅  (0) 2023.01.20
STL lower_bound, upper_bound  (0) 2020.04.12

+ Recent posts