CS
디자인 패턴
CAP.HEK
2024. 1. 30. 22:28
크게 생성, 구조, 행위 (생구행) 3개가 있음.
각 패턴의 이름을 쉽게 외우는 방법은 앞부분만 잘라서 외우면 쉽게 외워짐. 하지만 내용은 하나씩 더욱 구체적으로 공부해야 외워짐. 요약된 아래의 내용만 읊지 말고 추상팩토리에 대한 정보를 찾아서 읽어야 비로소 추상 팩토리가 어떤 것인지, 브릿지가 어떤 것인지 머리에 들어옴.
|생성 : 객체 생성에 대한 패턴, 캡슐화+유연화를 목표로 함 / 추빌팩프싱
- 추상팩토리(Abstract Factory) : 인터페이스를 통해 서로 연관, 의존하는 객체그룹으로 생성하여 추상적으로 표현합니다.
클라이언트는 팩토리의 클래스들을 알 필요 없으며, 팩토리가 어떤 것을 생성할지 신경쓰지 않아도 됩니다.
많은 수의 연관된 서브 클래스들을 특정 그룹으로 묶어 한번에 교체할 수 있도록 만든 것입니다. - 빌더(Builder) : 분리된 인스턴스를 조합하여 객체를 생성(건축하듯이)
- 팩토리메소드(Factory Method=Virtual Constructor) : 객체 생성을 서브클래스에서 처리(상위 클래스는 인터페이스만 제공)
상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 함.
상위 클래스는 인스턴스를 만드는 방법만 결정하고 하위 클래스에서 그 데이터의 생성을 책임지고 조작하는
함수들을 오버라이딩하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는
디자인 패턴입니다. - 프로토타입(Prototype) : 원본을 복제하는 형태
- 싱글톤(Singleton) : 생성된 하나의 객체를 어디서나 참조할 수 있지만 여러 프로세스가 동시에 참조할 수는 없음
|구조 : 객체를 조합하여 더 큰 구조로 만들 수 있게 하는 패턴 / 어브컴데파플프
- 어댑터(Adapter) : 호환성 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환함
- 브릿지(Bridge) : 추상화 / 구현층을 분리하여 서로 독립적인 확장 기능
- 컴포지트(Composite) : 합성. 트리구조로 구성되어있음.
- 데코레이터(Decorator) : 클래스 기능 추가를 위해 다른 객체를 덧붙여 객체간 결합, 능동적으로 기능을 확장함
- 파사드,퍼사드(Facade) : 다수의 서브 클래스 상위에 통합 인터페이스를 구성, 서브 클래스 기능을 간편하게 사용함.
복잡한 시스템을 단순한 인터페이스로 제공하여 유저와 시스템 간, 여타 시스템 간 결합도를 낮추어 시스템 구조 파악에 도움을 줍니다. 또한 오류에 대해 단위별로 확인 할 수 있어 유저에게 단순한 인터페이스를 제공하여 접근성을 높일 수 있습니다. - 플라이웨이트(Flyweight) : 다수의 유사 객체 생성 시 메모리 절약을 위해 필요할 때마다 생성하지 않고 최대한 공유하여 사용합니다.
다수 객체 생성시 공통적인 본질적인 요소는 클래스화 하여 공유하여 메모리를 절약하고 '클래스의 경량화'를 달성합니다. - 프록시(Proxy) : 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할 수행
|행위 : 상호작용이나 책임 분배 정의, 결합도는 최소화 / 체커인이메옵스스템비
- 책임연쇄(Chain of Responsibility) : 요청을 처리할 수 있는 개체들이 체인으로 묶여있어 체인을 따라 처리가 넘어감
- 커맨드(Command) : 기능을 캡슐화화여 재사용성이 높은 클래스를 설계하는 패턴입니다.
하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브 클래스가
선택되어 실행되는 특징을 갖고있습니다. - 인터프리터(Interpreter) : 언어의 문법표현 정의
- 반복자(Iterator) : 자료구조와 같이 접근이 잦은 객체는 동일한 인터페이스를 사용합니다.
컬렉션 구현 방법을 노출시키지 않고 그 집합체 안에 포함되어 있는 모든 항목에 반복자를 사용하여
접근 할 수 있는 디자인 패턴으로 내부 구조를 노출하지 않고, 복잡한 객체의 원소를 순차적으로
접근 할 수 있게 해주는 행위 패턴입니다. - 메멘토(Memento) : 특정 시점에서 객체 내부상태를 객체화, Ctrl+Z 기능이 이 패턴의 대표적 기능
- 옵저버(Observer) : 이벤트 발행, 구독, 상태변화 전달 ( 카톡의 읽음표시 같은 느낌)
- 상태 (State) : 이벤트를 객체 상태에 따라 동일한 동작을 다르게 처리할 때 사용 (카톡 알림 설정 같은 느낌)
객체의 '상태'를 캡슐화하여 클래스화해 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록
행위의 내용을 변경하여 추후 변경시 원시 코드의 수정을 최소화하며 유지보수하기 쉬워지는 패턴입니다. - 전략(Strategy) : 동일 계열의 알고리즘을 상호 교환, 독립적인 사용
- 템플릿 메소드(Template Method) : 상위 인터페이스의 골격 정의, 하위에서 처리 구체화(유지보수가 쉬워짐)
작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 일을 수행하는 구조는 바꾸지 않고 특정 단계에서 수행하는 내용을 바꾸는 패턴입니다. - 비지터(Visitor 방문자) : 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고
해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴입니다.
객체의 구조는 변경하지 않으며 기능만 따로 추가하거나 확장할 경우 사용합니다.
공부하며 필요한 부분을 기록하는 블로그입니다.
틀린 부분, 보완이 필요한 부분이 있다면 알려주시면 감사하겠습니다.