디자인 패턴

⚡프록시 패턴이란? 프록시 패턴(Proxy pattern)은 다른 객체를 대신해서 클라이언트와 상호 작용하는 객체를 제공하는 구조적인 디자인 패턴이다. 클라이언트는 프록시 객체를 사용하여 실제 객체에 대한 직접적인 접근을 피하고 프록시 객체가 실제 객체에 대한 간접적인 접근을 제공 한다. 이를 통해 실제 객체의 생성 및 소멸 등에 대한 부담을 줄이고 보안, 로깅, 캐싱 등의 부가 기능을 제공할 수 있다. 프록시 패턴은 크게 가상 프록시, 원격 프록시, 보호 프록시, 스마트 프록시 등으로 분류할 수 있습니다. 가상 프록시는 실제 객체의 생성을 지연시켜 성능을 향상시키는 역할을 한다. 원격 프록시는 네트워크를 통해 분산된 객체에 접근하는 역할을 한다. 보호 프록시는 클라이언트에게 필요한 권한이나 보안 문제를..
⚡플라이웨이트 패턴이란? 플라이웨이트 패턴(Flyweight Pattern)은 객체를 공유하여 메모리를 절약하는 구조적 디자인 패턴이다. 객체 생성 비용이 높은 경우, 객체 생성 시간이 오래 걸리는 경우, 객체가 많이 생성될 가능성이 있는 경우에 사용된다. 플라이웨이트 패턴에서는 객체를 두 가지 종류의 상태로 나눈다. 하나는 내부 상태(internal state)로 외부에서 변경할 수 없으며 다른 하나는 외부 상태(external state)로 외부에서 변경 가능하다. 내부 상태는 객체의 공유 가능한 부분이며 외부 상태는 객체의 개별적인 부분이다. 내부 상태는 객체를 공유하게 되므로 여러 개의 객체를 생성하지 않고 하나의 객체를 공유하여 메모리를 절약할 수 있다. 외부 상태는 객체마다 다르게 유지되어야 ..
⚡퍼사드 패턴이란? 퍼사드 패턴(Facade Pattern)은 복잡한 시스템 내부에 있는 다양한 모듈과 서브시스템들을 단순한 인터페이스로 대체하여 외부에서 시스템과의 상호작용을 단순화하고자 하는 디자인 패턴이다. 즉, 복잡한 시스템 구조를 가진 클래스, 라이브러리, 프레임워크 등을 사용하는 클라이언트가 시스템의 구현 내용을 몰라도 쉽게 사용할 수 있도록 하는 패턴이다. 이를 위해 시스템 내부의 다양한 모듈과 서브시스템들을 단순한 인터페이스로 제공하고 이를 사용하여 클라이언트가 시스템과 상호작용할 수 있도록 한다. 퍼사드 패턴의 기본 구조 Facade : 복잡한 서브시스템을 단순하게 제공하기 위한 인터페이스를 제공한다. 클라이언트는 이 인터페이스를 통해 서브시스템에 접근할 수 있다. Subsystem Cl..
⚡데코레이터 패턴이란? 데코레이터 패턴(Decorator Pattern)은 객체지향 디자인 패턴 중 하나로 객체에 추가적인 책임을 동적으로 부여할 수 있게 해 준다. 이 패턴은 기본 객체를 래핑하고 이 래핑 된 객체에 새로운 기능을 추가하는 방식으로 동작한다. 즉 객체에 대한 구성 요소를 수정하지 않으면서 객체의 기능을 확장하는 방법을 제공한다. 데코레이터 패턴 구성 요소 Component: 기본 객체에 대한 인터페이스를 정의 ConcreteComponent: Component 인터페이스를 구현하는 기본 객체 Decorator: Component 인터페이스를 구현하면서, 추가적인 책임을 부여할 수 있는 데코레이터를 정의 ConcreteDecorator: Decorator 인터페이스를 구현하여 데코레이터의..
⚡복합체 패턴이란? 복합체 패턴(Composite Pattern)은 객체 지향 디자인 패턴 중 하나로 객체들을 트리 구조로 구성하여 전체 - 부분 계층을 표현하는 패턴이다. 쉽게 말해 객체들을 계층 구조로 구성하여 부분과 전체를 나타내는 패턴이다. 복합체 패턴에서는 개별 객체와 복합 객체(부분과 전체를 나타내는 객체)를 같은 인터페이스를 가진다는 특징이 있다. 이를 통해 클라이언트는 개별 객체와 복합 객체를 구분하지 않고 동일한 방식으로 다룰 수 있다. 또한 복합 객체에서는 자식 객체를 추가하거나 제거하는 등의 작업을 수행할 수 있다. 복합체 패턴은 객체들이 계층 구조로 구성되어 있는 경우 예를 들어 UI 요소나 파일 시스템 등의 경우에 유용하게 사용된다. 또한 개별 객체와 복합 객체를 동일한 인터페이스..
⚡브리지 패턴이란? 브리지 패턴(Bridge Pattern)은 객체의 구현부와 추상적인 부분을 분리하여 각각을 독립적으로 변형할 수 있게 하는 디자인 패턴 중 하나이다. 브리지 패턴을 사용하면 추상화와 구현을 분리하여 클래스 간의 결합도를 낮출 수 있으며, 이는 코드의 재사용성과 유연성을 높일수 있게 해준다. 브리지 패턴은 크게 추상화(Abstraction)와 구현(Implementation) 두 가지로 구성된다. 추상화는 구현부에서 독립적으로 존재하는 객체의 추상 인터페이스를 정의하며 구현은 추상화에 정의된 인터페이스를 구현하는 구체 클래스를 제공한다. ⚡브리지 패턴은 어떤 경우에 사용하는가 ? 추상화와 구현이 각각 독립적으로 확장해야 하는 경우 추상화와 구현의 결합도를 낮추고자 하는 경우 상속으로 인..
⚡어댑터 패턴이란? 어댑터 패턴(Adapter Pattern)은 인터페이스가 서로 다른 두 개의 클래스를 연결하여 호환성을 제공하는 패턴이다. 기존에 작성된 클래스나 라이브러리를 다른 클래스에서 사용하기 쉽도록 인터페이스를 맞춰주는 패턴이다. 어댑터 패턴은 대개 다음과 같은 세 가지 구성요소로 이루어진다. Target: 기존 시스템에 사용되는 인터페이스를 정의한다. Adaptee: 어댑터 패턴을 적용할 대상이 되는 클래스이다. 이 클래스의 인터페이스를 변경하거나 개선하는 것이 목적이다. Adapter: Adaptee 클래스를 Target 인터페이스에 맞게 변환해주는 클래스이다. 예를 들어 두 개의 클래스 A와 B가 있는 경우, 클래스 A는 클래스 B의 인터페이스와 다르다. 이때, 클래스 A를 클래스 B에..
⚡프로토 타입 패턴이란? 프로토타입 패턴(Prototype pattern)은 객체 생성에 대한 비용이 높은 경우 생성 비용을 최소화하기 위해 사용하는 디자인 패턴 중 하나이다. 이미 존재하는 객체를 복제하여 새로운 객체를 생성하는 방식으로 동작한다. ⚡프로토 타입 패턴은 어떤 경우에 사용하는가 ? 객체의 생성이 복잡하고, 시간이 오래 걸리는 경우 객체를 생성하는 과정에서 많은 계산이 필요하거나, 복잡한 초기화 작업이 필요한 경우에는 프로토타입 패턴이 유용하다. 이 패턴을 사용하면 이미 생성된 객체를 복제하여 새로운 객체를 생성하기 때문에 객체 생성 과정에서 발생하는 비용을 줄일 수 있게 된다. 객체 생성에 필요한 정보가 동적으로 결정되는 경우 객체 생성에 필요한 정보가 동적으로 결정되는 경우이다. 이 경..
⚡빌더 패턴이란? 빌더 패턴(Builder pattern)은 생성 패턴 중 하나로 객체 생성과정을 분리하고 복잡한 객체를 조립하기 위한 디자인 패턴 중 하나이다. 객체의 생성 과정을 객체 자체와 분리하여 객체 생성의 유연성과 확장성을 높이고 객체 생성 코드의 가독성과 유지보수성을 개선한다. 더보기 빌더 패턴은 생성해야 되는 객체가 Optional한 속성을 많이 가질 때 빛을 발휘한다. 빌더 패턴은 다음과 같은 구성요소를 갖는다. Builder: 객체를 생성하기 위한 인터페이스를 제공한다. 이때, 관례적으로 생성하고자 하는 클래스 이름 뒤에 Builder를 붙인다. ConcreteBuilder: Builder 인터페이스를 구현하여 객체를 생성하는 구체적인 빌더 클래스이다. ConcreteBuilder 클래..
HaeTae
'디자인 패턴' 태그의 글 목록