본문 바로가기

디자인패턴4

# 5. 싱글턴 패턴 응용 이번 포스트는 파이썬으로 작성한점 양해 부탁드립니다. 아래의 포스트를 읽고 오는 것을 권장한다. https://dev-ryuon.tistory.com/53 dev-ryuon.tistory.com 필자는 싱글턴 패턴을 사용하면서 한번 생성한 인스턴스를 재사용할 수 있다는 점(메모리 할당 면에서 효율적)과 전역적으로 해당 인스턴스를 사용할 수 있다는 점이 좋았다. 일단 파이썬으로 싱글턴 패턴을 어떻게 구현했는지 확인해보자. class SingletonInstance: __instance = None @classmethod def __getInstance(cls): return cls.__instance @classmethod def instance(cls, *args, **kwargs): cls.__inst.. 2021. 8. 4.
#3. 컴포지트 패턴 (Composite Pattern) 컴포지트 패턴은 복합 객체와 단일 객체를 클라이언트에서 구별없이 다루게 해주는 패턴이다. (일종의 일반화를 위한 인터페이스를 정의) OCP(Open-Closed Principal)을 준수하기에 용이하다. (변화에는 닫혀있고, 확장에는 열려있다.) public class Computer { private Keyboard keyboard; private Body body; private Monitor monitor; ... } 위와 같은 코드는 확장에 용이하지 못하다. 그 이유는 Keyboard, Body, Monitor의 공통된 타입이 존재하지 않기 때문이다. (컴퓨터라는 전체 시스템의 부분집합이라는 공통점이 존재함에도 불구하고) 단점 : 공통점(부분집합)으로 묶은 인터페이스에 공통되는 기능들은 메소드 멤.. 2021. 1. 19.
#2. 데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴은 기능을 동적으로 확장할 때 유용한 패턴이다. 예를 들어보자. A라는 기본기능과 B, C, D라는 추가 기능을 조합할 경우, 경우의 수는 A A + B A + C A + D A + B + C A + B + D A + C + D A + B + C + D 8가지의 경우가 나온다. 그럼 무식하게 메소드만을 활용하여 (상속을 통해) 8가지의 클래스를 정의해서 사용할 것인가? 최악의 경우를 생각해보자. 추가 기능이 1억개면? 답이 없다.. 그래서 메소드가 아닌 인스턴스의 조합을 활용하면 어떨까? 라는 생각에서 나온것이 데코레이터 패턴이다. 첨언을 하자면, DefaultBehavior 클래스는 기본기능이라고 생각하자. public abstract class Base { public abstract .. 2020. 12. 28.
#1. 싱글턴 패턴 (Singletone Pattern) 짧지만... 첫 직장에서 Unity를 개발했다. 생전 처음으로 Unity를 접해본 나는 Component, GameObject등 다양한 타입의 객체들이 있었는데 무작정 작동을 하는데에만 신경을 쓴 나머지 같은 객체의 생성자를 불필요하게 남발한 적이 있다. 그리고, 필자는 책임님한테 무지하게 혼났다능..ㅠㅠ 그리고 디자인패턴에 관심을 가지게 되어 처음으로 공부한 패턴이다. 이 글을 보는 분은 나같은 화를 당하지 않았으면 하는 마음이다.. 각설하고, 싱글턴 패턴은 위에서 쓴 강조표시 그대로 객체의 생성을 단 한번만 하는게 초점이라고 생각한다. 그럼 코드를 보기 전에 상상해보자. "단 한번"이라는 조건이 붙어있기 때문에 해당 객체가 존재한다면? 생성자를 호출하지 않고, 존재하지 않을때에만 즉, 메모리상에 해당.. 2020. 12. 10.