공부/디자인 패턴
-
[Design Pattern] 책임 연쇄 패턴 (Chain of Responsibility Pattern)공부/디자인 패턴 2021. 5. 15. 19:13
클라이언트에게 어떠한 요청이 들어왔을 때, 요청을 받은 객체가 해당 요청을 해결할 수 없을 경우 연결된 다음 객체들에 전달하고 해당 요청을 해결할 수 있는 객체가 처리하는 방식입니다. 요청 객체와 처리 객체를 분리하거나 요청을 처리할 수 있는 객체가 여러 개인데 하나의 객체에 요청을 보낼 때 책임 연쇄 패턴을 적용할 수 있습니다. 즉, 요청을 처리할 수 있는 객체가 여러개이고 이러한 처리를 하는 객체가 명시적이지 않을 때 사용할 수 있는 패턴입니다. 클래스 다이어그램 Handler: 요청을 처리하기 위한 객체들이 가질 인터페이스 ConcreteHandler1, 2: 요청 종류에 따라 자신이 처리 할 수 있는 부분을 구현한 객체 Client : 수신자에게 처리 요청 장점 요청의 발신자와 수신자를 분리시킬 ..
-
[Design Pattern] 프록시 패턴 (Proxy Pattern)공부/디자인 패턴 2021. 5. 9. 20:13
프록시 패턴이란 프록시 의미 그대로 실제 기능을 수행하는 주체(RealSubject)를 바로 호출하는 대신 대리자(Proxy)를 거쳐서 호출하는 것입니다. 즉, 클라이언트 → 실제 기능을 담당하는 객체 가 아닌, 클라이언트 → 프록시 객체 → 실제 기능을 담당하는 객체의 흐름으로 진행됩니다. 클래스 다이어그램 장점 실제 기능을 담당하는 객체의 리소스가 무거운 경우, 프록시 객체에서 간단한 처리를 하거나(클라이언트의 요청에 대한 유효성 검사를 통해 유효한 경우만 메인 객체 호출) 캐싱 처리를 통해 부하를 줄일 수 있습니다. 앞에서 설명한 간단한 처리를 통해 보안의 역할을 가질 수 있습니다. 단점 아무래도 클라이언트 - 메인 객체 사이에 프록시 객체가 끼어있는 상황이기에 응답이 느리거나 에러를 발생할 수도 ..
-
[Design Pattern] 플라이웨이트 패턴 (Flyweight Pattern)공부/디자인 패턴 2020. 7. 26. 18:14
Flyweight 패턴은 비용이 큰 자원을 공통으로 사용할 수 있도록 만드는 패턴입니다. 여기서 자원에 대한 비용은 크게 두가지로 나눠 볼 수 있습니다.중복 생성될 가능성이 높음중복 생성될 가능성이 높다는 의미는 동일한 자원이 자주 사용될 가능성이 높은 것입니다. 이러한 자원은 공통 자원으로 관리하고 있다가 요청이 있을 때 제공해 주는 것이 좋습니다.자원 생성 비용은 큰데 사용 빈도는 낮음생성 비용이 크지만 사용 빈도가 낮은 자원을 미리 생성해 두는 것은 좋지 않습니다. 따라서 요청이 있을 때, 생성해서 제공해 주는 편이 좋습니다. 일반적으로 Factory와 관리 역할을 분리하는 것이 좋아 보이지만 굳이 나누고자 할 정도로 크기가 크지 않아서 하나의 클래스가 담당하도록 구현을 합니다. 이러한 패턴을 적용..
-
[Design Pattern] 퍼사드 패턴 (Facade Pattern)공부/디자인 패턴 2020. 7. 25. 23:34
퍼사드 패턴은 복잡한 호출 과정을 한 번 더 감싸서 단순한 형태로 제공하는 패턴입니다. 예를 들어, 특정 쇼핑몰에서 A라는 상품을 사기 위해서는 A 상품의 물건이 존재하는지, 주문자의 지역에 배송이 가능한지, 배송업체가 존재하는지 등 특정 절차를 밟아야 합니다. 퍼사드 패턴을 적용하지 않는다면 사용자가 복잡한 절차를 순서있게 호출해야 하지만 퍼사드 패턴을 적용하면 주문하기 와 같은 버튼 1개로 노출하고 복잡한 절차를 숨길 수 있습니다.class Qty: def check(self): pass class Delivery: def valid(self): pass class Amount: def check(self): pass # 퍼사드 클래스 class Order: def __init__(self): sel..
-
[Design Pattern] 컴포지트 패턴 (Composite Pattern)공부/디자인 패턴 2020. 3. 8. 17:59
컴포지트 패턴이란?객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴입니다. 객체와 객체들의 집합 간의 처리 방법의 차이가 없을 경우 사용하면 됩니다. 여기서 컴포지트는 객체 또는 객체 집합을 트리 구조로 구성하는 의미입니다. 단일 객체와 복합 객체의 처리 방법이 다르지 않은 경우, 전체 - 부분 관계로 정의할 수 있는데 여기의 대표적인 예는 폴더-파일 구조입니다. 위 클래스 다이어그램을 폴더 - 파일 구조로 표현하면 아래와 같습니다.예시위 파일 구조를 아래와 같이 표현할 수 있습니다.// component interface Node { public String getName(); } // leaf class Fil..
-
[Design Pattern] 브리지 패턴 (Bridge Pattern)공부/디자인 패턴 2020. 3. 8. 17:03
브리지 패턴이란?브리지 패턴은 구현부에서 추상층을 분리하여 각자 독립적으로 변형 및 확장이 가능하도록 만드는 패턴입니다. 즉, 기능과 구현에 대해 두 개의 별도의 클래스로 구현합니다. Abstraction : 기능 계층의 최상위 클래스이며 추상 인터페이스RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의ConcreteImplementor : 실제 기능을 구현하는 클래스예시헬스장에서 운동을 하는 것으로 예시로 들어보겠습니다.먼저 기능 부에 운동하는 사람에 해당하는 exerciser가 존재하고 그 하위에 오직 하체만 하는 사람, 오직 상체만 하는 사람 (예시를 위해 극단적으로..)의 클래스가 있다고..
-
[Design Pattern] 어댑터 패턴 (Adapter Pattern)공부/디자인 패턴 2020. 2. 29. 22:38
어댑터 패턴이란?한 클래스의 인터페이스를 다른 클래스에서 사용하고자 할 때, 다른 클래스에서 사용할 수 있도록 호환성을 제공해주는 패턴입니다. 예를 들어, 한국에서는 220v가 표준이지만 일본은 110v가 표준입니다. 한국에서 사용하는 충전기를 일본에 가져가면 콘센트의 모양이 맞지 않아 충전을 할 수 없습니다. 이 때, 돼지코와 같은 변환기(어댑터)를 사용해 한국에서 가져온 충전기를 일본에서 충전할 수 있도록 하는 기능이 여기서 말하는 어댑터 패턴이라 볼 수 있습니다.예시아래와 같이 한국전자제품 인터페이스와 삼성 클래스가 있다고 구현합니다.public interface KoreaElectronicProduct { public void 220v(); public void electricPressure();..
-
[Design Pattern] 팩토리 패턴 (Factory Pattern)공부/디자인 패턴 2020. 2. 29. 20:15
팩토리 패턴이란?객체를 만들어 반환하는 함수를 생성자 대신 팩토리 형태로 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법입니다.일반적으로 자바에서는 객체를 아래와 같이 생성합니다. SomeClass someClassObject = new SomeClass (); 위 선언의 문제는 SomeClass의 객체를 사용하는 부분에서 SomeClass의 구현에 의존성이 생기는 것입니다. new를 사용하여 객체를 생성하는 부분은 문제가 없지만 코드를 구체적인 구현 클래스에 결합하여 제공을 하게 됩니다. 이러한 경우는 구현 문제가 아닌 인터페이스에 대한 코드 위반입니다. 더 자세하게 나무위키에 나온 예시를 봅니다. (https://namu.wiki/w/%EB%94%94%EC%9E%90%E..
-
[Design Pattern] 프로토타입 패턴 (Prototype Pattern)공부/디자인 패턴 2020. 2. 23. 19:28
프로토타입 패턴이란?프로토타입 패턴은 원래 객체를 복제한 새로운 객체를 만들고, 그 복제본을 변경해 사용하는 패턴이프로토 타입 패턴은 기존의 객체를 복사하여 새로운 객체를 만들고 복사한 객체를 변경하여 사용하는 패턴입니다. 여기서 복사된 객체를 프로토타입이라고 합니다. 이러한 행동을 하는 이유는 때때로 새로운 객체를 만드는 것이 기존 객체를 복사하는 것 보다 비용이 더 많이 들 수 있습니다. 예를 들어, DB에서 데이터를 가져오는 클래스가 있는데 프로그램 내에서 데이터 수정을 여러번 이뤄지면 똑같은 데이터를 매번 DB에서 가져오는 것은 좋지 않습니다. 이러한 문제로 인해서 인스턴스를 깊은 복사 또는 얕은 복사를 통해 1번만 DB에 접근하여 데이터를 수정할 수 있도록 합니다.파이썬에서..파이썬에서는 cop..
-
[Design Pattern] 싱글톤 패턴 (Singleton Pattern)공부/디자인 패턴 2020. 2. 23. 18:41
싱글톤 패턴이란?개발을 진행하다 보면 클래스 내에서 인스턴스를 1개만 생성해야 하는 경우가 있습니다. 이럴 때, 해당 클래스를 사용하는 여러 곳에서 인스턴스를 계속 생성하다 보면 불필요하게 메모리 낭비를 야기 시킵니다. 이럴 때 싱글톤 패턴을 사용하면 불필요한 메모리 낭비를 방지하고 해당 클래스의 인스턴스를 바로 호출할 수 있습니다.싱글톤 패턴에서는 생성자를 클래스 자체에서만 접근할 수 있도록 private와 같이 접근 제어자를 통해 제어해야 합니다. 만약 생성자를 열어두면 해당 클래스를 다른 부분에서 인스턴스화 시킬 수 있기 때문입니다. 접근 제어자로 막는 것과 더불어 수정이 되지 않도록 막아야 합니다. 만약 인스턴스 생성 이후, 수정이 가능하다면 해당 클래스의 인스턴스를 Null로 초기화 시켜버릴 수..