development 3

퍼사드(Facade)

디자인 패턴 중에서 퍼사드(Facade)에 대해서 알아보자. 퍼사드 패턴은 GoF가 제시한 구조 패턴(Structural Pattern)중의 하나로 클라이언트에게 시스템의 복잡성(complexity)을 숨기고, 사용하기 편하도록 간단하고 구체적인 고수준의 인터페이스를 제공하는 패턴이다. 복잡한 라이브러리 또는 프레임워크를 생각해 보자. 원하는 동작을 위해선 객체를 초기화하고 종속성을 추적하며 메소드를 실행해야 한다. 하지만 클라이언트측에선 이를 모두 이해하고, 유지하기란 쉽지 않다. 퍼사드는 시스템이 아무리 복잡하더라도 간단하고 쉽게 클라이언트가 접근 할 수 있는 인터페이스를 제공하는 것이다. 기본개념 퍼사드 패턴에는 일반적으로 Facade 클래스, System 클래스, Client 클래스가 있다. Fa..

보그(Borg)

디자인 패턴 중에서 보그(Borg) 패턴에 대해 알아보자. 보그는 단일 상태(monostate) 라고도 불리운다. 단일 동작을 위한 싱글톤(Singleton) 패턴과 매우 유사하지만 차이점은 상태(state)를 공유한다는 점이다. 즉, 여러개의 인스턴스는 하나의 상태(state)를 공유한다. 싱글턴을 사용한다면 서브클래싱(subclassing)에서는 보그 패턴이 더 나은 대안이 될 수 있다. 두 개 이상의 서브클래스가 하나의 슈퍼클래스를 상속한 경우 서브클래스별로 동작(behavior)을 다르게 재 정의하지만 상태는 여전히 공유되기 때문이다. class Borg: _shared_sate = {} def __init__(self): self.__dict__ = self._shared_sate if __na..

데코레이터(Decorator)

디자인 패턴 중에서 데코레이터(Decorator)에 대해서 알아보자. 데코레이터 패턴은 GoF가 제시한 구조 패턴(Structural Pattern) 중의 하나로 어떤 한 클래스의 인스턴스 동작을 변경하지 않고, 새로운 인스턴스에 동작을 다이나믹하게 추가하는 패턴이다. 데코레이터 패턴은 기능이 확장될 때 서브클래싱(subclassing)의 대안으로 사용할 수 있다. 그리고 데코레이터 패턴은 객체지향 5대 원칙(SOLID) 중 OCP(Open-Close Principle)에 해당한다. OCP는 확장에는 개방되고, 변경에는 폐쇄한다는 원칙인데, 이는 변경을 위한 비용은 가능한 줄이고, 확장을 위한 비용은 가능한 극대화해야 한다는 의미이다. 즉, 기존의 소프트웨어를 쉽게 확장해서 재사용할 수 있어야 한다는 것..