[GOF] JavaScript Design Patterns

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Cheer Up!

  • from Clean STEEM activity supporter

Hi @lsh1117! You have just received 0.1 SBD tip from @lsh1117!

send tips with @tipU | earn interest in @tipU profit

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

tip!

뉴비는 언제나 환영!이에요.
팁! : 영향력이 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!