[GOF] JavaScript Design Patterns

in #kr7 years ago (edited)

디자인패턴의 종류

생성 패턴 ( Creational Patterns )

  1. 추상 팩토리 ( Abstract Factory )
    구체적인 클래스를 지정하지 않고 관련성을 갖는 개체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴. 구상 클래스는 서브클래스에 의해 만들어 진다.

  2. 빌더 ( Builder )
    복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴

  3. 팩토리 메서드 ( Factory Method )
    객체를 생성하기 위한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하도록 한다. 팩토리 메소드를 이용하면 인스턴스를 만드는 일을 서브클래스로 미룰 수 있다.

  4. 원형 ( Prototype )
    생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제(clone)하게 된다.

  5. 단일체 ( Singleton )
    생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.

구조 패턴 ( Structural Patterns )

  1. 적응자 ( Adapter )
    클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다.

  2. 가교 ( Bridge )
    구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴

  3. 복합체 ( Composite )
    객체들의 관계를 트리 구조로 구성하여 부분 - 전체 계층을 표현하는 패턴. 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 함

  4. 장식자 ( Decorator )
    주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브 클래싱1 대신 쓸 수 있는 유연한 대안이 있습니다.

  5. 퍼사드 ( Facade )
    서브 시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴. 서브 시스템을 좀 더 사용하기 편하게 만드는 상위 수준의 인터페이스를 정의

  6. 플라이급 ( Flyweight )
    크기가 작은 객체가 여러 개 있을 때, 공유를 통해 이들을 효율적으로 지원하는 패턴

  7. 프록시 ( Proxy )
    어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자 ( Surrogate ) 또는 자리채움자 ( Placeholder )를 제공하는 패턴

행동 패턴 ( Behavioral Patterns )

  1. 책임 연쇄 ( Chain of Responsibility )
    요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여하여 요청을 보내는 객체와 그 요청을 받는 개체 사이의 결합을 피하는 패턴. 요청을 받을 수 있는 객체를 연쇄적으로 묶고, 실제 요청을 처리할 객체를 만날 때까지 객체 고리를 따라서 요청을 전달

  2. 명령 ( Command )
    요청을 객체의 형태로 캡슐화하여 서로 요청이 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 그리고 연산의 취소를 지원하게 만드는 패턴

  3. 해석자 ( Interpreter )
    주어진 언어에 대해, 그 언어의 문법을 위한 표현 수단을 정의하고, 이와 아울러 그 표현 수단을 사용하여 해당 언어로 작성된 문장을 해석하는 해석기를 정의하는 패턴

  4. 반복자 ( Iterator )
    내부 표현부를 노출하지 않고 어떤 객체 집합에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공하는 패턴

  5. 중재자 ( Mediator )
    한 집합에 속해있는 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴. 객체들이 직접 서로를 참조하지 않도록 함으로써 객체들 사이의 소결합 ( Loose Coupling )을 촉진시키며, 개발자가 객체들의 상호작용을 독립적으로 다양화시킬 수 있게 만듦

  6. 메멘토 ( Memento )
    캡슐화를 위배하지 않은 채로 어떤 객체의 내부 상태를 잡아내고 실체화시켜, 이후에 해당 객체가 그 상태로 되돌아올 수 있도록 하는 패턴

  7. 감시자 ( Observer )
    객체들 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 만드는 패턴

  8. 상태 ( State )
    객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게끔 허가하는 패턴으로, 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보임

  9. 전략 ( Strategy )
    동일 계열의 알고리즘군을 정의하고, 각각의 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만드는 패턴. 알고리즘을 사용하는 사용자와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 함

  10. 템플릿 메서드 ( Template Method )
    객체의 연산에는 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리는 서브 클래스 쪽으로 미루는 패턴. 알고리즘의 구조 자체는 그대로 놔둔 채 알고리즘 각 단계의 처리를 서브 클래스에서 재정의할 수 있게 함

  11. 방문자 ( Visitor )
    알고리즘을 객체 구조에서 분리시키는 디자인 패턴. 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 개방-폐쇄 원칙을 적용하는 방법의 하나이다.

Sort:  

Cheer Up!

  • from Clean STEEM activity supporter

This post received a 55% upvote from @krwhale thanks to @lsh1117! For more information, click here!
이 글은 @lsh1117님의 소중한 스팀/스팀달러를 지원 받아 55% 보팅 후 작성한 글입니다. 이 글에 대한 자세한 정보를 원하시면, click here!

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
http://blog.naver.com/PostView.nhn?blogId=qkfkf123&logNo=60190581919&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true

뉴비는 언제나 환영!이에요.
팁! : 영향력이 56이 되자 보팅파워바가 생겼어요. 스팀파워로만 생기는 것은 아닐지도 모르겠네요.
1.00% 보팅
현재 보상량 : [ 평균 - 0.82 / 8개 / 합계 : 6.54 ]

  • kr-newbie 보안관 봇! (beta 0.8.0 - 2017/08/29)

@lsh1117 got you a $1.68 @minnowbooster upgoat, nice!
@lsh1117 got you a $1.68 @minnowbooster upgoat, nice! (Image: pixabay.com)


Want a boost? Click here to read more!

This post received a 55% upvote from @krwhale thanks to @lsh1117! For more information, click here!
이 글은 @lsh1117님의 소중한 스팀/스팀달러를 지원 받아 55% 보팅 후 작성한 글입니다. 이 글에 대한 자세한 정보를 원하시면, click here!