CS/디자인패턴
-
[디자인 패턴][행위 패턴] - 비지터 패턴CS/디자인패턴 2023. 8. 18. 18:08
1. Visitor 패턴 데이터 구조와 연산을 분리하여 새로운 연산을 추가하거나 변경하기 쉬운 구조를 만드는데 사용하는 패턴 데이터 구조의 클래스와 새로운 연산을 수행하는 클래스 간의 결합도를 낮추는 데에 유용 사용하는 경우 새로운 연산 추가: 클래스 계층 구조에 있는 여러 객체들에 대해 새로운 연산을 추가해야 할 때, 해당 객체 클래스들을 수정하지 않고도 새로운 연산을 구현 가능 => "개방/폐쇄 원칙"을 준수하여 시스템의 확장성을 높임 비슷한 동작을 하는 다양한 클래스: 다양한 클래스에 비슷한 동작을 적용해야 할 때, 이를 반복적으로 구현하지 않고 방문자 패턴을 사용하여 효율적으로 구현 비즈니스 로직 분리: 비즈니스 로직과 연산을 분리하여 유지 보수성과 가독성을 높일 수 있음 다형성을 활용한 작업: ..
-
[디자인 패턴][구조 패턴] - 프록시 패턴CS/디자인패턴 2023. 8. 18. 09:55
1. 프록시 패턴 다른 객체에 대한 대리자 또는 대변자 역할을 수행하는 패턴 다양한 형태가 있지만, 가상 프록시, 보호 프록시가 대표적이다. 사용하는 경우 원본 객체에 대한 접근을 제어해야 할 때 원본 객체의 생성 및 소멸에 대한 추가적인 기능을 제공해야 할 때 원본 객체의 메서드 호출 전후에 추가적인 로직을 수행해야 할 때 원본 객체의 접근을 제어하거나 보안을 강화해야 할 때 구현 방법 실제 주체 (Real Subject): 프록시가 대리하는 실제 객체 실제 작업을 수행하거나 수행할 수 있는 실제 비즈니스 로직이 구현 프록시가 생성되거나 사용되는 시점에 실제 객체가 생성되고 초기화될 수 있음 프록시 (Proxy): 실제 주체에 대한 대리자 역할 실제 객체의 생성과 초기화를 지연시키거나, 접근 제어와 보..
-
[디자인 패턴][구조 패턴] - 플라이웨이트 패턴CS/디자인패턴 2023. 7. 13. 11:02
1. 플라이웨이트 패턴 객체 공유를 통해 메모리 사용을 최적화하는 패턴 다수의 유사한 객체를 생성하는 상황에서 중복된 데이터를 공유함으로써 메모리 사용을 줄이고 성능을 향상 동일한 내용을 가진 객체를 여러 개 생성할 필요 없이, 객체를 공유 사용하는 경우 많은 수의 유사한 객체를 생성해야 할 때 객체 생성 비용이 높고, 중복 데이터가 많이 포함된 경우 객체가 불변(Immutable)하거나, 상태가 외부에서 공유 가능한 경우 구현 방법 Flyweight : 공유 가능한 객체를 정의하는 인터페이스 또는 추상 클래스, 내부 상태를 가지며, 외부에서 공유 가능한 상태를 가진 객체를 생성하는 메서드를 제공 ConcreteFlyweight 클래스 : Flyweight 인터페이스를 구현하고 내부 상태를 저장하는 클래..
-
[디자인 패턴][구조 패턴] - 퍼사드 패턴CS/디자인패턴 2023. 7. 12. 19:12
1. 퍼사드 패턴 복잡한 서브시스템을 단순한 인터페이스로 감싸서 클라이언트에게 간단한 접근 인터페이스를 제공하는 패턴 복잡한 시스템을 더 쉽게 사용할 수 있도록 하고, 시스템의 내부 구조에 대한 접근을 단순화 사용하는 경우 복잡한 서브시스템을 사용하는 과정을 단순화하고 싶을 때 서브시스템의 인터페이스를 감추고자 할 때 클라이언트가 여러 개의 객체와 상호작용하지 않고 단일 인터페이스를 통해 상호작용하길 원할 때 구현 방법 Facade 클래스 : 클라이언트와 서브시스템 간의 중간 역할을 수행하며, 클라이언트에게 단순한 인터페이스를 제공, 서브시스템의 복잡한 내부 동작을 감추고 클라이언트의 요청을 적절한 서브시스템 객체로 전달 SubSystem 객체 : 서브시스템의 실제 동작을 담당하는 객체, Facade는 ..
-
[디자인 패턴][구조 패턴] - 데코레이터 패턴CS/디자인패턴 2023. 7. 12. 10:20
1. 데코레이터 패턴 객체의 기능을 런타임 시에 동적으로 추가하거나 수정할 수 있게 해주는 패턴 기본 객체에 추가적인 기능을 덧붙이는 방식으로 동작하며, 객체 간의 계층 구조를 가짐 사용하는 경우 객체의 기능을 확장하고자 할 때: 기존 객체를 변경하지 않고 새로운 기능을 추가하거나 수정 기능의 조합이 많은 경우: 다양한 기능 조합이 필요한 경우, 각각의 기능을 개별적으로 구현하여 조합 구현 방법 Componen 인터페이스 : 기본 객체와 데코레이터 객체가 구현하는 공통 인터페이스, 기본 객체나 데코레이터 객체 모두 이 인터페이스를 구현 ConcreteComponent 클래스: 기본 객체를 나타내는 클래스로, 기본 기능을 구현 Decorator : 데코레이터 객체의 공통 기능을 정의하는 추상 클래스 또는 ..
-
[디자인 패턴][구조 패턴] - 컴포지트 패턴CS/디자인패턴 2023. 7. 11. 13:49
1. 컴포지트 패턴 객체들을 트리 구조로 구성하여 전체-부분의 관계를 표현하는 패턴 개별 객체와 객체들의 집합을 동일한 방식으로 다룰 수 있게 해주어 복합 객체를 표현하고 조작할 수 있다. 클라이언트가 개별 객체와 복합 객체를 구분하지 않고 동일한 방식으로 다룰 수 있도록 도와준다. 사용하는 경우 전체-부분 계층 구조를 갖는 객체들을 다룰 때: 객체들이 트리 구조로 구성되어 있고, 개별 객체와 복합 객체를 일관된 방식으로 처리해야 할 때 사용 사용자가 개별 객체와 복합 객체를 동일한 방식으로 다루어야 할 때: 클라이언트가 객체들을 구분하지 않고 통일된 인터페이스를 통해 조작해야 할 때 사용 구현 방법 Component 인터페이스: 모든 객체에 대한 공통 인터페이스를 정의, 개별 객체와 복합 객체를 동일한..
-
[디자인 패턴][구조 패턴] - 브릿지 패턴CS/디자인패턴 2023. 7. 10. 16:13
1. 브릿지 패턴 상화와 구현을 분리하여 각각 독립적으로 확장할 수 있도록 하는 패턴 구현부와 추상화부를 분리하여 변경에 유연하고 확장 가능한 구조를 만들어줌 사용하는 경우 추상화된 인터페이스와 구현부 간에 독립적인 확장이 필요한 경우 추상화된 인터페이스와 구현부 간의 강한 결합을 피하고자 하는 경우 추상화된 인터페이스와 구현부 간의 변경이 서로 독립적으로 이루어져야 하는 경우 복잡한 클래스 계층 구조를 간소화하고 유연성을 확보하고자 하는 경우 구현 방법 Abstraction 클래스 : 기능의 추상 인터페이스를 정의, 구현자(Implementor) 객체를 참조 Implementor 인터페이스 : 추상화의 인터페이스를 구현하는 구현자 객체 Refined Abstraction 클래스 : 추상화를 확장하여 새..
-
[디자인 패턴][구조 패턴] - 어댑터 패턴CS/디자인패턴 2023. 7. 7. 15:52
1. 어댑터 패턴 호환되지 않는 인터페이스를 가진 두 개의 클래스를 함께 작동하도록 해주는 구조적인 패턴 인터페이스 호환성 문제를 해결하기 위해 사용 사용하는 경우 기존의 클래스를 수정하지 않고 새로운 인터페이스를 사용하고 싶은 경우 이미 존재하는 클래스의 인터페이스를 다른 인터페이스로 변환해야 하는 경우 호환되지 않는 두 클래스 사이의 상호 작용이 필요한 경우 구현 방법 Target : 클라이언트가 사용하려는 인터페이스를 정의 Adaptee : 기존에 존재하는 인터페이스를 가지고 있는 클래스 Adapter : Target 인터페이스를 구현하고 Adaptee를 감싸서 사용하려는 인터페이스와 Adaptee의 인터페이스를 연결 Client : 적응 대상과 Target 인터페이스 사이의 상호 작용을 요청하는 ..