Flyweight Pattern플라이웨이트 패턴(Flyweight Pattern)은 메모리 사용을 줄이기 위해 많은 수의 작은 객체를 공유하는 디자인 패턴입니다. 이 패턴은 객체의 상태를 내적 상태와 외적 상태로 나누어, 내적 상태를 공유하여 메모리 사용을 최적화합니다.Flyweight Pattern → 동일한 것을 공유해서 낭비를 없앤다는 특징이 있습니다.Flyweight는 플라이급 이라는 의미로, 권투에서 가장 체중이 가버운 체급을 의미합니다.Design Pattern에서는 Object를 가볍게 하기 위한 것의 의미에서 사용됩니다.Object는 컴퓨터 내부에서 가상적으로 존재하는 것이기 때문에 무겁다 또는 가볍다고 표현은 실제 무게가 아닌, “메모리의 사용량”을 의미하는 것입니다.객체를 만들 때 그 ..
Bridge Pattern브리지 패턴(Bridge Pattern)은 소프트웨어 디자인 패턴 중 하나로, 구현부와 추상화된 인터페이스(기능) 를 분리하여 서로 독립적으로 변경할 수 있도록 하는 패턴입니다.이 패턴은 구조 패턴(Structural Pattern) 중 하나로, 시스템을 더 모듈화하고 유지보수성을 높이기 위해 사용됩니다.AbstractionHigh Level Layer어플리케이션의 Interface 혹은 UIImplementor어플리케이션에서 돌아가는 실제 구현 코드Abstraction만 볼 수 있고 실제 Implementor은 숨길 수 있는 구조입니다.외부에서 보여지는 것과 내부 Implementor를 분리하고자 할 떄 사용하기 좋습니다.Bridege Pattern: Example 1Class..
Facade Pattern퍼사드 패턴(Facade Pattern)은 복잡한 시스템이나 서브시스템의 인터페이스를 단순화하는 디자인 패턴입니다.이 패턴은 클라이언트가 시스템을 더 쉽게 사용할 수 있도록 시스템의 복잡성을 감추고, 단순한 인터페이스를 제공합니다.퍼사드 패턴은 객체지향 설계 원칙 중 하나인 "단일 책임 원칙"(Single Responsibility Principle)을 따르며, 시스템의 각 구성 요소를 보다 명확하게 분리합니다.Facade Pattern이란 건물의 앞면처럼 그 뒤쪽의 복잡함은 내부에 숨기고 단단한 인터페이스만 제공합니다.여러개의 서브시스템을 통합하여 고수준의 API를 제공한다는 특징이 있습니다.Client는 여러 라이브러리와 클래스를 필요로 하는 상태입니다.이런 경우, 여러 클래..
Decorator Pattern데코레이터 패턴(Decorator Pattern)은 객체의 기능을 동적으로 추가하고 확장할 수 있는 패턴입니다.이 패턴은 상속을 사용하지 않고도 객체에 새로운 행동을 추가할 수 있게 해줍니다.데코레이터 패턴은 여러 개의 데코레이터 객체를 조합하여 다양한 기능을 동적으로 조합할 수 있는 유연성을 제공합니다.Decorator Pattern은 Object(객체)를 꾸며주는 역할을 합니다.원하는 기능으로 감싸서 사용할 수 있게 만들어주는 패턴 입니다.class Animal: def speak(self): passclass Cat(Animal): def speak(self): print("Meow", end='')class Dog(Animal): ..
Adapter Pattern - 어댑터 패턴Adapter Pattern은 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간에 어댑터를 두어 인터페이스를 변환해주는 역할을 합니다.하나의 Interface를 다른 Interface로 전환하는 역할 → 이러한 역할을 Adapter Pattern에 적용합니다.‘이미 제공되어 있는 것’과 ‘필요한 것’ 사이의 ‘차이’를 없애주는 디자인 패턴을 Adapter 패턴이라고 합니다.또한 Adapter 패턴은 Wrapper 패턴으로 불리기도 합니다.Wrapper는 ‘감싸는 것’이라는 의미가 있는데, 무언가를 포장해서 다른 용도로 사용할 수 있게 교환해주는 것이 wrapper이며, adapter라고 합니다.두가지의 종류가 있습니다.클래스에 의한 Adap..
Proxy Pattern - 프록시 패턴Proxy Pattern은 주로 객체의 접근을 제어하거나 객체에 추가적인 기능을 제공하기 위해 사용됩니다.이 패턴은 주체(Real Subject)와 그 주체에 대한 대리자(Proxy)로 구성됩니다.Proxy는 대리인 이라는 의미, 일을 대신 하는 사람이라는 의미입니다.‘대리인 proxy’이 할 수 있는 범위를 넘는 일이 발행하면, 실제 ‘본인 real’ 에게 와서 업무요청을 한다는 특징이 있습니다.객체지향 프로그래밍에서는 바빠서 일을 할 수 없는 ‘real object’ 대신에 ‘proxy object’가 어느정도 일을 처리하기도 합니다.그리고 real 오브젝트는 proxy 오브젝트의 존재를 모릅니다.즉, 이말은 자신이 proxy를 경유해서 호출되고 있는지 직접 호..
Singleton PatternSingleton 패턴은 클래스의 인스턴스가 하나만 생성되도록 보장하고, 그 인스턴스에 접근할 수 있는 전역 접근점을 제공하는 패턴입니다.그리고 특정 클래스의 인스턴스가 애플리케이션 전체에서 하나만 존재해야 할 때 사용됩니다.또한 특징들을 아래에 적어보자면.클래스에 대한 단일 객체를 생성합니다.전역 객체를 제공합니다.공유된 리소스에 대한 동시 접근 제어가 가능합니다.글로벌 엑세스 지점을 제공하는, 단점이 거이 없는 검증된 패턴입니다.위의 다이어그램을 예시로 보면, 생성자를 private로 선언하고, 객체를 초기화 하는 static 함수를 만들어 구현할 수 있습니다.첫 호출에 객체가 생성되고, 그후 클래스는 동일한 객체를 계속 반환합니다.class Singleton(objec..
Builder PatternBuilder 패턴은 객체 생성 패턴 중 하나로, 복잡한 객체를 단계적으로 구성할 수 있도록 하는 패턴입니다.Object의 생성과정이 복잡할 때 이를 간단하게 만들어줍니다.생성과정이 복잡할 수 있는 여러 경우는 매우 다양합니다.예를 들어 하나의 Object를 생성시, 여러개의 argument가 필요할 때 Builder Pattern이 쉽게 만들어 줄 수 있습니다.핵심 개념Builder 인터페이스: 객체를 구성하는 각 단계를 정의합니다.Concrete Builder 클래스: Builder 인터페이스를 구현하여, 각 단계를 구체적으로 정의합니다.Director: Builder 인터페이스를 사용하여 객체 생성의 순서를 정의합니다. 생성 과정의 제어를 담당합니다.Product: 최종적..
Prototype Pattern객체를 생성할 때 미리 정의된 다른 객체를 복제(clone)하여 새로운 객체를 생성하는 방법입니다아래의 경우 클래스로부터 인스턴스를 만드는 것이 아니라 인스턴스를 복사해서 새로운 인스턴스를 만드는것이 좋습니다.종류가 너무 많아서 클래스로 정리되지 않는 경우클래스로부터 인스턴스 생성이 어려운 경우framework 와 생성하는 인스턴스를 분리하고 싶은 경우장점객체 생성 비용 절감: 복제(clone) 메서드를 사용하여 객체를 생성하므로, 객체를 처음부터 생성하는 것보다 비용이 적게 듭니다.객체 초기화의 단순화: 객체를 생성하고 초기화하는 과정이 복잡할 경우, 미리 초기화된 객체를 복제하여 사용할 수 있습니다.동적인 객체 생성: 런타임에 객체를 생성하고 수정할 수 있습니다. 단점깊..
Abstract Factory Pattern 추상 팩토리 패턴(Abstract Factory Pattern)은 관련성이 있는 여러 종류의 객체를 생성하기 위한 인터페이스를 제공하는 생성 디자인 패턴입니다. 이 패턴은 구체적인 클래스에 대한 정보 없이도 서로 연관되거나 의존적인 객체의 군을 생성할 수 있도록 해줍니다. 또한, 팩토리 자체를 추상화함으로써 객체들을 쉽게 생성할 수 있습니다. 주요 특징은 다음과 같습니다: 인터페이스 제공: 추상 팩토리는 객체를 생성하기 위한 인터페이스를 제공합니다. 이 인터페이스는 관련된 객체들의 생성을 추상화하고, 클라이언트에게는 객체의 구체적인 클래스에 대한 정보를 숨깁니다. 서로 연관된 객체 생성: 추상 팩토리 패턴은 서로 연관된 객체들의 군을 생성합니다. 예를 들어, ..