본문 바로가기

디자인 패턴

(6)
Worker Thread Pattern Worker Thread Worker는 '일을 하는 사람' 혹은 '작업자'를 의미합니다. System 관점에서 Woker의 역할은 Process 혹은 Thread가 일임한다. Thread의 경우, Overhead와 같은 이슈때문에 Thread Pool에서 미리 생성되어 존재하고 필요시 하나씩 위임된다. 처리 흐름 클라이언트 쓰레드는 request(일)을 채널 쓰레드에 의뢰합니다. 채널쓰레드는 쓰레드풀에서 워커 쓰레디를 호출하여 reqeust 처리를 요청합니다. 워커 쓰레드는 일을 처리하고 다시 Thread Pool로 돌아가 일의 request를 기다립니다. 채널 쓰레드는 클라이언트 쓰레드에게 응답을 보냅니다. Client Thread
데코레이터(Decorator) 패턴 데코레이터 패턴 특징 서브클래스를 통해 기능을 유연하게 확장할수 있다. 동적으로 추가적인 기능들을 첨가할수 있다. 데코레이터 패턴 클래스 다이어그램 예시 커피 가게 사업을 시작하여 주문 시스템을 도입한다고 가정해보자.
4. 전략 패턴 전략 패턴이란? 위키피디아에서는 전략 패턴을 다음과 같이 설명하고 있다. 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다 전략은 알고리즘을 사용하는 클라이언트와는 독립적으로 다양하게 만든다 유연하고 재사용 가능한 객체 지향 소프트웨어를 어떻게 설계하는지 기술하기 위해 디자인 패턴의 개념을 보급시킨 디자인 패턴(Gamma 등)이라는 영향력 있는 책에 포함된 패턴들 가운데 하나 전략패턴이란 특정 컨텍스트에서 알고리즘을 별도로 분리하는 설계 방법을 의미합니다. 다음으로 예시를 한번 살펴보겠습..
3. 이터레이터 패턴 이터레이터 패턴(iterator pattern) 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공한다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들수 있다. 이터레이터 패턴을 사용하면 모든 항목에 일일이 접근하는 작업을 컬렉션 객체가 아닌 반복자 객체에서 맡게 된다. 이렇게 하면 집합체의 인터페이스 및 구현이 간단해질 뿐 아니라, 집합체에서는 반복작업에서 손을 떼고 원래 자신이 할 일(객체 컬렉션 관리)에만 전념할 수 있다. public class FoodMenu { String name; String description; int price; publi..
2. Adapter Pattern 설명하기전에 항상 생각해야 하는 주제가 있다고 생각한다. 우리는 왜 Adapter Pattern을 사용할까 ? 프로그래밍을 하며 시스템을 만들때는, 여러 다양한 라이브러리를 사용하거나 혹시 커스텀한 클래스나 인터페이스를 사용하고 싶은 경우가 있다. 상황을 한번 가정해보자. 나는 A라는 클래스를 만들고 있다. 근데 B라는 클래스가 가지고 있는 메소드들을 활용하거나 Overriding해서 클래스를 만들고 싶은 상황이다. 이럴 경우 할수 있는 방법은 1. 같은 상위 클래스를 가지는 경우, 다형성을 활용한다. 2. 그렇지 않을 경우 해당 객체를 상속한다. 하지만, 상속의 경우는 강한 결합을 낳게 된다. 강한 결합을 낳기에 is A관계가 아니면 신중해야 하며, 강한 결합을 하길 원치 않는다. 라는 판단이 설때, ..
1. Factory Pattern 개발을 진행하다보면 다음과 같이 일련의 코드를 만들어야 하는 경우가 생긴다. Pizza pizza; if (type.equals("cheeze")) pizza = new CheezePizza(); else if (type.equals("ham")) pizza = new HamPizza(); else if (type.equals("bacon")) pizza = new BaconPizza(); 이러한 코드가 존재한다는 것은 유연성이나 확장성에서 크나큰 문제를 야기할수 있다. 왜냐하면, 확장하거나 축소해야 할때, 코드를 다시 추가하거나 제거해야 함을 의미하기 때문이다. 인터페이스에 맞춰서 코딩을 하면 시스템에서 일어날 수 있는 여러 변화를 이겨낼 수 있다. 왜냐하면.. 다형성 덕분에 어떤 클래스든 특정 인터페..