본문 바로가기
Programming/디자인 패턴

GOF 디자인 패턴 한줄 정리!

by Teshub 2021. 1. 21.

그동안 공부하며 했던 디자인 패턴을 일단 간략 요약정리해볼까 합니다

물론 각 디자인 패턴을 최대한 간단히 설명한 것이라 여기에 간단하게 정리 후 자세한 내용은 따로 포스팅할 예정입니다.

 

모든 내용은 제가 공부하며 정리한 부분이기 때문에 오류가 있을 수 있습니다

틀린 사항 있을 시 댓글에 수정 적어주시면 감사하겠습니다.

 

1. 스트래티지 패턴(Strategy)  (link)

일명 전략 패턴 

알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.

알고리즘을 사용하는 클라이언트와 독립적으로 로직을 변경이 가능하다.

 

2. 스테이트 패턴 (State)

객체의 내부 상태가 바뀜에 따라서 객체의 행동을 정의할 수 있다

클래스가 바뀌는 효과를 낸다

(실제로 클래스가 바뀌진 않는다 스트래티지 패턴하고의 가장 큰 차이점이다)

 

3. 옵저버 패턴 (Observer)  (link)   

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다

 

ex) 구독 시스템

어떤 정보가 바뀌면 해당 블로그를 구독하는 사람들에게 연락이 가는 것 또는 정보가 전해 지는 것이라 생각하면 된다

 

4. 데코레이터 패턴 (Decorator)   (link)

객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터 패턴을 사용 시 서브클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다.

(추상적으로 구현한 형식의 코드에서만 정상적인 적용이 가능하다) -  이 부분은 확인 중입니다.

 

5. 팩토리 메서드 패턴 (Factory Methos)   (link)

객체를 생성하기 위한 인터페이스를 정의합니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다.

 

6. 추상 팩토리 패턴 (Abstract Factory)   (link)

인터페이스를 이용하여 서로 연관, 의존 객체를 구현 클래스로 지정하지 않고 생성할 수 있습니다.

 

7. 싱글턴 패턴 (Singleton)   (link)

해당 클래스의 인스턴스가 하나만 생성되고 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴

 

8. 커맨드 패턴 (Command)   (link)

요구사항(정보)을 객체로 캡슐화할 수 있으며 매개변수를 써서 여러 가지 다른 요구사항을 집어넣을 수도 있습니다.

또한 요청내역을 큐에 저장하거나 로그로 기록할 수 있으며 작업 취소 기능도 지원합니다.

 

9. 어댑터 패턴 (Adapter)

클래스의 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다

인터페이스가 호환되지 않아 쓸 수없었던 클래스들을 같이 사용할 수 있게 해 줍니다.

 

10. 퍼사드 패턴 (Facade)

서브시스템에 있는 일련의 인터페이스에 대한 통합 인터페이스를 제공합니다. 퍼사드 패턴에서는 서브시스템을 더 쉽게 사용할 수 있게 해주는 고수준 인터페이스(최상위 인터페이스라생각하면 될 것 같습니다)를 정의합니다.

 

11. 템플릿 메서드 패턴 (Template Method)

어떤 작업(로직)을 골격을 정의합니다 일부 단계에서는 서브클래스에서 구현하도록 할 수 있습니다.

템플릿 메서드를 이용하면 로직의 구조는 유지하면서 특정 단계만 서브클래스에서 새로 정의할 수 있습니다.

 

12. 이터레이터 패턴 (Iterator)

컬렉션 구현 방법을 노출시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공합니다.

 

13. 컴포지트 패턴 (Composite)

객체들을 트리구조로 구성하여 부분 객체와 전체를 나타내는 계층구조로 만들 수 있습니다.

클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체를 똑같은 방식으로 사용할 수 있게 합니다.

 

14. 프록시 패턴 (Proxy)

어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체로 제공하는 패턴

다른 객체를 대변하는 객체를 만들어서 주 객체에 대한 접근을 제어합니다.

728x90

댓글