본문 바로가기
반응형

개발/기본) 디자인패턴21

디자인패턴)더블 디스패치(Double Dispatch) 더블 디스패치(Double Dispatch) 이 패턴은 둘 이상의 개체 유형에 따라 다르게 동작해야 하는 작업이 있는 경우 특히 유용하다고한다. 단일 디스패치의 단점을 보완했다. public interface IShape { void Accept(IShapeVisitor visitor); } public class Circle : IShape { public void Accept(IShapeVisitor visitor) { visitor.Visit(this); } } public class Square : IShape { public void Accept(IShapeVisitor visitor) { visitor.Visit(this); } } public interface IShapeVisitor { v.. 2023. 7. 31.
디자인패턴) 노출 모듈 패턴 (Revealing Module Pattern- JavaScript) 노출 모듈 패턴 (Revealing Module Pattern- JavaScript) 공개 모듈 패턴은 JavaScript에서 캡슐화된 모듈식 코드를 생성하는 데 사용되는 디자인 패턴으로. 이를 통해 비공개 및 공개 메서드와 변수를 사용하여 코드를 모듈로 구성하는데 목적이 있다. 패턴은 특정 기능 및 데이터에 대한 가시성과 액세스를 제어하는 ​​데 도움이 되며 모듈과 상호 작용하기 위한 명확하게 독립성을 부여한다. 예시코드는 다음과 같다. var MyModule = (function() { var privateVariable = 'This is a private variable'; function privateFunction() { console.log('This is a private function'.. 2023. 6. 16.
디자인패턴) Main Loop Architecture Main Loop Architecture 메인 루프란? 여러가지 병행적으로 처리되지 않고 하나의 Main Logic에서 동작을 해야하는 것들을 따로 관리하는 패턴을 말한다. 심플하지만 필요에 따라 사용하면 굉장히 유용한 결과를 만들수있다. 하지만 장점과 단점이 있다는 것을 생각 해야 한다. 장점 단점 병렬로 진행됨으로 순차적인 처리 및 시간의 지연을 방지할수 있다. 순차적인 실행이 필요하다. 하나의 큰 흐름을 제어함으로 디버깅 및 플로우 명확하게 파악할수 있다. 코드의 규모가 커진다. SRP (Single Resoponsibility Principle)과 반대된다. 지연에 대한 문제를 최소화하거나 보간등 여러가지 관리의 차원에서는 도입하는것에 대한 고민을 해보는것을 추천한다. 본인은 단순히 모바일 게임을.. 2023. 1. 5.
디자인패턴)KISS Command Pattern (KEEP IT SIMPLE STUPID) KISS Command Pattern (KEEP IT SIMPLE STUPID) 단순하고 멍청하게 유지. 라는 마인드로 개발하는 방식을 말한다. 개발하는 과정에서 복잡한걸 단순화하게 하는 과정으로도 많은 것들이 정리가 되는데 해당 디자인 패턴은 단순하게 하는 필요성을 목적으로 한다. Unity 프로젝트에서 KISS Command Pattern(이하 Kiss 패턴)을 사용할때의 이점은 다음과 같다고 한다. 1. 비동기 동작의 간단한 처리 2. 읽을 수 있는 단계 (순서 보장) 3. 관련 없는 시스템의 우호적인 협력 (독립성) 레벨업하는 과정을 예시는 다음과 같다. ExecuteLevelUpCommand() { UpdatePlayerProfile() SyncWithBackend().. 2022. 4. 5.
디자인패턴) 방문자 패턴(Visitor Pattern) 방문자 패턴(Visitor Pattern) Visitor 패턴은 '데이터의 구조'와 '처리'를 분리하는데 목적이 있다. 추상 클래스를 통해서 처리를 추가하고 방문자를 등록하면 된다. 데이터 구조는 요소를 집합으로 정리하거나, 요소 사이를 연결해주는 중요한 역할을 합니다. 그러나 구조를 유지하는 것과 구조를 기초로 한 처리를 기술하는 것과는 별개이기 때문에 File 클래스나 Directory 클래스의 부품으로써의 독립성을 높일 수 있다. ★★☆☆☆ 2020. 7. 7.
디자인패턴) 데코레이터 패턴(Decorator Pattern) 데코레이터 패턴(Decorator Pattern) 데코레이터 패턴은 기본 베이스를 가지고 추가로 다른 장식을 포함하는 형태를 말한다. Display를 기본으로 추가로 다른 장식을 포함해서 표현하는 예시를 보자. Display는 추상클래스고 StringDisplay는 문자열 표기, SideBorder와 FullBorder는 장식을 표현하는 클래스이다. 확장성을 고려할때 많이 사용하는 패턴이다. ★★☆☆☆ 2020. 7. 7.
디자인패턴) 복합 패턴(Composite Pattern) 복합 패턴(Composite Pattern) 내용을 동일시해서 재귀적인 구조를 만들기 위한 디자인 패턴이다. Entry는 File과 Directory을 동일시하기 위한 추상 클래스로 Entry를 통해서 처리하면 동일한 메서드로 동일하게 처리가 가능하다. ★★☆☆☆ 2020. 4. 29.
디자인패턴)전략 패턴 (Strategy Pattern) 전략 패턴 (Strategy Pattern) 전략 패턴은 문제를 해결하기 위한 특정 알고리즘이 구현된다. 그 알고리즘을 구현한 부분을 치환하면으로 다른 전략과 정책 작전으로 교체가 가능한 패턴이다. 가위바위보를 하는 프로그램인데 '이기면 다음에도 같은 것을 낸다'(Wining Strategy)와 다른 하나는 '직전에 냈던 손에서 다른 것을 계산한다(Prob Strategy)의 전략이다. 보통 프로그래밍에서 내부에 메인 코드에 있는 경우가 종종 있다. 그러나 Strategy 패턴에서는 알고리즘의 기능이 분리되어 있고 인터페이스로 분리한다. 느슨한 연결으로 내부의 전략을 용이하게 수정할 수 있다. ★★☆☆☆ 2020. 4. 25.
디자인패턴) 브릿지패턴 (Bridge Pattern) 브릿지 패턴 (Bridge Pattern) 브릿지 패턴의 역할은 '기능 계층과 구현 계층을 분리하기 '이다. 기능 계층과 구현 계층을 분리한다는 것은 의존성이 낮아진다는 것을 의미하고 쉽게 수정과 추가가 가능하다는 것을 말한다. 새로운 기능을 추가하고 싶은 경우는 다음과 같다. -상위 클래스는 기본적인 기능을 가지고 있다. -하위 클래스에서는 상위 클래스를 상속하고 새로운 기능을 추가한다. 새로운 구현을 추가하고 싶은 경우 -상위 클래스는 추상 메소드에 의해 인터페이스를 정의한다. -하위 클래스는 구상 메소드에 의해 그 인터페이스를 구현한다. ★★☆☆☆ 2020. 4. 25.
디자인패턴) 빌더 패턴 (Builder Pattern) 빌더 패턴 (Builder Pattern) Builder 패턴은 건축물을 올라가듯이 구조를 가지고 있는 것을 Build라고 하는데 지반을 다지고 골격을 세우고 조금씩 쌓아갑니다. 우선 전체를 구성하고 있는 각 부분을 단계적으로 만들고 조립하는 형태로 취한다. 실제 구성의 Builder 클래스에서는 추상 클래스로 하위 크래스에서 실제 기능을 구현합니다. ★★☆☆☆ 2020. 4. 6.
디자인패턴) 프로토타입 패턴(ProtoType Pattern) 프로토타입 패턴(ProtoType Pattern) 프로토타입 패턴은 기본 베이스를 가지고 새로운 인스턴스를 만드는 과정에서 너무 많은 타입이 나와 정리가 되지 않는 경우 주로 사용한다. 클래스에서 인스턴스를 만들지 앟고 프로토타입 패턴을 쓰는 이유는 종류가 너무 많아서 클래스로 정리가 힘든 경우에 프로토타입 패턴을 사용해서 재사용성이 늘어날 수 있다. 그냥 클래스로 정의를 해서 구현하게 되면 기능당 클래스가 한 개가 되기 때문에 기하급수적으로 늘어난다. framework와 인스턴스를 분리하고 싶은 경우와 클래스로부터 인스턴스 생성이 어려운 경우에도 사용하면 좋다. 내부에 이용할 클래스의 이름이 잇으면 그 클래스와 분리해서 재이용할 수 없기 때문에 재사용성을 늘리기 위해서 프로토타입 패턴을 사용한다. 개인.. 2020. 4. 5.
디자인패턴) 싱글톤 (Singleton Pattern) 싱글톤 (Singleton Pattern) 프로그램을 실행할 때 대부분 많은 인스턴스들이 생성됩니다. 그러나 클래스의 인스턴스가 단 한 개이어야 한 경우가 있습니다. 데이터를 참조해서 사용하는 경우 나절대로 1개밖에 존재하지 않는 것을 보증하고 싶을 때 사용하는 디자인 패턴이다. 인스턴스가 유일무이하게 단 한개만 존재하는 패턴을 Singleton 패턴이라고 한다. 싱글톤 클래스는 static 메소드로 인스턴스를 내부에 포함하고 있다. 싱글톤은 동일한 인스턴스를 반환한다. 대부분은 매니져 클래스에서 싱글톤을 많이 사용한다. 다양한 Singleton 방식에 대해서는 다음을 참고하면 된다: [링크] Singleton pattern - Wikipedia In software engineering, the sin.. 2020. 4. 4.
디자인패턴 ) 템플릿 패턴(Template Pattern) 템플릿 패턴(Template Pattern) 템플릿 패턴은 상위 클래스에서는 실제 구현부가 아닌 추상 메서드만 구현하고 하위 클래스에서 실제 기능을 구현한다. 하위 클래스에 따라서 실제 기능이 달라지기 때문에 재사용성 및 독립성이 보장이 된다. 추상화 클래스로 Unit에서 Move만 정의하고 Unit을 상속받은 Air Unit과 Land Unit에서 실제 해당 기능의 구현을 구현한다. Air Unit의 Move는 하늘을 이동하는 기능을 구현하고 Land Unit에서는 땅에서 이동을 하는 기능을 구현한다. 이렇게 정의만 하고 기능 구현을 하위 클래스에서 작성을 하고 실제 메서드를 호출은 Move를 하면 된다. 템플릿 패턴을 사용하게 되면 로직을 공통화할 수 있고, 상위 클래스와 하위 클래스의 연계가 가능하.. 2020. 4. 2.
디자인패턴) 어뎁터 패턴(Adapter Pattern) 어뎁터 패턴(Adapter Pattern) 어댑터 패턴의 특징은 위임을 하는 것이다. 모양이 다른 타입의 USB 선이 있는데 연결하고 싶을 경우 우리는 '젠더'라는 중간에 연결하는 어뎁터를 사용한다. 어뎁터 패턴도 마찬가지다. public class Main{ Print p = new PrintBanner("사과팝니다"); p.printWeak(); p.printStrong(); } Main 클래스에서 사용하는 PrintBanner 를 첩근 하지만 실제 showWithParen()과 ShowWidthAster에 대한 접근을 전혀 고려하지 않아도 됩니다. 나중에 수정이 되면 해당 PrintBanner에 대한 클래스 구조를 변경하면 된다. 어댑터 패턴을 실제 구현부가 분리되어있기 때문에 자주 사용하는 디자인.. 2020. 4. 2.
디자인패턴) 이터레이터 패턴( Iterator Pattern) 이터레이터 패턴( Iterator Pattern) Iterator 패턴은 무엇인가 많이 모여 있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 디자인 패턴이다. 반복해서 처리한다는 기능이 특징이다. 서가(BookShelf) 안에 책(Book)을 넣고 책을 검색 하는 프로그램을 예시로 보면 UML 다음과 같다. 특징은 Book을 BookShelf에 등록을 하게 되고 실제 검색을 하는 과정에서는 BookShelf의 데이터에서 iterator를 통해서 hasNext가 끝날 때까지 검색에 대한 로직을 처리한다. 실제 해당 기능상으로는 반복해서 처리하는 로직이긴한데 왜 이 Iterator 패턴을 사용해야 할까? 가장 큰 이유는 iterator 패턴을 사용하는 과정에서 구현을 분리가 되기 때문이.. 2020. 3. 31.
반응형