본문 바로가기

Design Patterns

(28)
Adapter Pattern ③ 마무리하며.. 어댑터 패턴에 대해서 간략히 알아봤는데요.. 어댑터 패턴이라는 놈을 멋있게 표현하면... (그럴싸하게;;;) 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.라고 책에서 정리를 하고 있습니다. 그러면.. 제가 만든 예제 소스 다이어 그램 말고.. -ㅅ- 보편적으로 사용되는 어댑터 패턴 클래스 다이어그램을 살펴보도록 하겠습니다. 완전 대따!!! 간단합니다... 'ㅡ' ㅋㅋㅋㅋ 일단 총 4가지의 클래스 및 인터페이스를 확인 할 수 있는데요.. 1. Client 2. IService 3. Adapter 4. Adaptee총 4가지가 있습니다. Client는 말 그대로 어떠..
Adapter Pattern ② 예제 소스 음.. 일단.. 이번에도 스타크래프트를 예를 들어서 소스코드를 만들었습니다. 우선 테란 유닛들에 대해서 잘 생각해 보면.. 모든 유닛이 공통적으로 가능한 것들이 클릭했을때 어떠한 특정한 목소리를 내는것이고.. 하나는 적군 유닛을 공격하도록 합니다. 그래서 아래와 같이 UML 이 그려졌습니다. 일단 TerranUnitInterface 라는 것을 만들어 주구요.. 이걸 구현하는 클래스가 원래는 2개가 있었습니다. 바로 Marine 클래스와 SiegeTank 클래스입니다. 둘다 attack() 과 clickIntAction() 메소드를 오버라이드 하고 있구요.. 그런데.. 확장팩이 생기면서 메딕이라는 유닛이 나타났습니다. 이유닛은 똑같이 공격 명령을 내리는데.. 메딕은 공격대신에 아군을 치료한다고 합니다. 비..
Adapter Pattern ① 개념 정리 책에서도 나오지만.. 어댑터라는 개념은...-_-;; 별로 어려운 내용이 아니더라구요.. 실제로 많이 사용하는 전기 플러그를 떠올리면 되겠습니다 -ㅅ-// 흔히 돼지코라고도 불리우는데.. 디지털 카메라.. (내수품으로) 사용하시는 분들은 익히 잘 아실것이라고 생각합니다. 110V 의 전원을 220V 의 전원을 사용하는 우리나라에서 사용하려면 특수한 어댑터가 필요한 겁니다. 그런 역할을 하는 것이 이 어댑터라는 개념입니다. 그러면 어댑터 패턴은 뭘까요? 예를 들자면.. 어떤 회사에서 물건을 구입하는 시스템을 만든다고 했다고 가정합니다. 여러사람들이 각각 자기가 맡은 분야의 클래스들을 작성을 해오는데.. 사람마다 저마다 틀리기 때문에 인터페이스가 통일이 되지 않을 수 있고.. 또 다른 시스템을 외부에서 도입..
Command Pattern ③ 정리 식당을 예를 들어서 커맨드 패턴을 정의 해봤습니다. 'ㅡ';; 미친놈 소리 하질지 모르겠지만.. 재미있지 않나요;;? 컴퓨터라는 것은 사람의 일상을 벗어나지 않는것 같습니다. 제 아무리 컴퓨터라도.. 어쩔수 없는게지요 -ㅅ-.. 사실 사람 머리에서 나온 컴퓨터가 뭐 지 혼자서 하는게 있겠습니까;; ㅋㅋ 여튼.. -ㅅ-;; 커맨드 패턴을 한마디로 정의하면.. 이렇다고 하네요.. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원 가능합니다. 머 뻔드러지게 이야기는 했지만.. -ㅅ-; 쉽게 말하면, execute() 메소드를 호출하므로서 모..
Command Pattern ② Implements Command Pattern 음.. 실제로 음료를 주문한다고 생각하고 소스코드를 한번 작성해 봤습니다. -ㅅ- 개념적으로 설명하면 공부도 안될뿐 더러;; 제대로 해야겠다는 생각이 듭니다.. 사실 이 패턴 공부하면서 ㅠㅠ 잘 모르겠어요.. 갑자기 안하던 공부를 할려니까 머리가 막 아프로 그러네요 -ㅅ- ㅋㅋㅋㅋㅋ 일단 다이어 그램을 그렸습니다. 'ㅡ';; Amondo 로 그렸습니다. 음료를 주문하는 절차를 가진 커맨드 패턴 예제 소스를 만들었는데요.. 먼저 음료라는 추상클래스가 있고 소주, 맥주, 사이다, 콜라 있습니다 -ㅅ-;; 더 추가 하면 되겠죠.. order() 라는 메소드를 오버라이드 해서... 뭐 시켰습니다 라는 메세지가 뜨도록 해놨구요.. Command 인터페이스와 Command 객체인 BeverageOnCommand 라..
Command Pattern ① Command의 개념 책에서는 커맨드 패턴에 대해서 설명하기를 마치 음식을 주문하는 것과 같다고 이야기 하는군요.. 뭐 음식을 주문하는 과정을 살펴보면.. 아래와 같겠죠.. 1. 손님이 웨이터에게 주문을 합니다. 2. 작성한 주문서를 웨이터는 카운터에 가져다 줍니다. 3. 주방장이 주문서대로 음식을 만듭니다. 그림으로 그려보면 아래와 같습니다. 말로 풀어서 설명을 해보자면.. 손님이 주문을 생성하면 주문서가 작성이 되구요. 작성된 주문서를 종업원이 받아서 주방장에게 전해주면 주방장은 주문서에 있는 대로 음식을 만드는 일을 하는 거죠.. 손님 입장에서는 원하는데로 주문을 요청하고 종업원은 단순히 주방장에게 주문이 들어왔다는 것만 알려주면 되구요.. 주방장은 주문이 들어올때 주문서에 있는 내용 그대로 음식을 만드는 일을 하면 됩..
Singleton Pattern 싱글턴 패턴에 대해서는 배워본적이 있습니다. Agile Java 책에도 간간히 다루고 있습니다.. 워낙 순서 없이 가는 책인지라.. 이것저것 들어본건 많아서 좋긴하네요. 일간 이름이 생소하지 않으니까 막연한 두려움이 없는거 같아요. 일단 싱글턴 패턴에 대해서는 간단하게 정의하자면 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 이라고 정의가 되어있습니다. 이 전의 어느 패턴보다도 말을 들었을때 이해가 쉬운 패턴이네요. 다시 말하면 한개의 객체만이 필요한 경우에 사용하는 패턴이라고 볼 수 있겠습니다. 두개의 이상의 객체가 생기면 안되는 경우에 싱글턴 패턴을 사용하면 좋겠지요. 일단은 여러개의 객체가 만들어지지 않을려면?? new 연산자를 사용하여 객체..
Factory Method Pattern ③ DIP (Dependency Inversion Principle) 패턴 책을 보면서 중간 즈음에 나오는 Dependency Inversion Principle (이하, DIP) 라는 원칙이 나옵니다. 한국말로 해석을 하자면 의존성 뒤집기 원칙이라고 하는데, 의존성이라는 것에 대해서 다시 한번 생각해본다면 무언가에 의존한다는 건 마치 서브 클래스들이 상위 클래스에 의존한다는 것과 뉘앙스가 비슷하다는 생각이 듭니다. 근데 의존성 뒤집기라고 부르는 이유가 뭘까요??? 디자인 원칙으로 이렇게 이야기 합니다. 추상화된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다.역시 뭔말인지 못알아 듣겠습니다. 확실한건 추상화를 사용하라는걸 보니 추상클래스나 인터페이스 중심으로 설계를 하라는 것 처럼 보입니다. 이전에 이야기 했던 특정 구현이 아닌 인터페이스에 맞춰서..