본문 바로가기

전체 글

(678)
Observer Pattern ② 패턴 활용 예제 먼저 지난 Strategy Pattern 예제는 스타크래프트로 만들었는데 이번에는 월드 오브 워크래프트를 이용해서 한번 만들어 보았습니다. 게임을 통해서 무언가 공부를 한다는건 재미있고 또 이해하는데 많은 도움이 되는것 같습니다. 먼저 옵저버 패턴에서의 Subject(주제)가 되는 것은 몬스터라고 설정을 했습니다. 몬스터를 잡기 위해서는 혼자보다는 파티 구성을 해서 잡기 때문에 파티원 하나하나를 옵저버로 보고, 몬스터의 광포화 상태와 약점의 속성이 바뀔때 마다 플레이어의 반응이 달라지도록 구현을 했습니다. 일단 몬스터라는 클래스의 소스코드를 살펴보시겠습니다. package designPattern.Observer; import java.util.ArrayList; public class Monster i..
Observer Pattern ① 개요 지난번 Strategy Pattern에서는 상속과 구현을 이용한 클래스 설계 후에 그것을 리팩토링 하면서 해나가면서 배우는 디자인 패턴이었다면, 이번에는 다른 방법으로 접근을 해보겠습니다. 먼저 Observer Pattern을 간단하게 그림과 함께 알아보도록 하겠습니다. 유후군 잇힝리라는 마을이 있다고 가정을 합시다. 잇힝리에 사는 현씨네 큰 아들이 장가를 간다고 이장님이 이 동네사는 현아네, 윤주네, 범석이네 식구들에게 방송으로 이 경사스러운 소식을 알렸습니다. 그렇지만 잇힝리에 살지 않는 한산이네까지는 방송이 되지 않았습니다. 옵저버 패턴은 이와 같이 동네 이장님이 동네 사람들에게 어떤 소식을 알리는 것과 같은 것을 비유해서 알고 있으면 기억하기가 쉽습니다. 보통 유식한 말로 이렇게 이야기 합니다. ..
Strategy Pattern ③ 정리 책에서는 세가지의 디자인 원칙을 내세우면서 궁극적으로 Strategy Pattern으로 가기 위한 로드맵을 제공합니다. ① 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. ② 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. ③ 상속보다는 구성을 활용한다. ① 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. attack(), move(), stop().. 등의 바뀌는 부분을 분리시켜서 따로 만들어 준것 기억하시죠? 그것들을 행동 별로 나누어서 또 세분화 시켜준 것을 의미합니다. ② 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 이전에 있던 Attackable과 같은 인터페이스는 Terran을 상속받는 구체적인 유닛 클래스가 구체적으로 구..
Strategy Pattern ② Encapsulation(캡슐화) 와 Composition(구성)을 활용한 리팩토링 말은 그럴싸 합니다만.. -_-;; 그럼 실제로 슬슬 고쳐보도록 하겠습니다. (텍스트 보다는 비주얼하게!!) 이렇게 한번 바까 줘 봤습니다. 유닛들의 행동을 구현하는데요.. 사실 이전에 있던 인터페이스로 행동을 구현하도록 했던 다이어 그램에 보면, SCV랑 메딕이랑 고치는 메소드도 사실은 모호했지요.. 이렇게 나눈 덕분에 사람을 고치는지 건물을 고치는지 명확해 졌구요.. 공격을 하는 경우와 공격을 하지 않는 경우, 이동을 하고, 이동을 못하는 경우의 클래스를 만들어서 해당 인터페이스의 메소드를 구현해 주면 되겠죠!! (공격 못하는 메딕에게 공격 명령을 내렸을때, 아무 것도 안하게 말이죠!!) 여기서 끝인가 했는데 아닙니다 -_-;; 이제 Terran이라는 클래스도 변경을 해줘야합니다. 그리고 유닛별 메소..
Strategy Pattern ① 상속과 구현의 문제점 먼저 스타크래프트를 활용하여 Strategy Pattern 으로 가는 예제를 만들어 볼까 합니다. 일단 참고하고 있는 책은 Head First, Design Pattern 이며, 앞으로도 이 책으로 공부를 해 나가려고 합니다. 위와 같이 상속을 사용하여 만들어 보았습니다. 테란 종족은 보여지거나, 움직이거나, 공격하거나, 멈추는 4가지의 공통적인 메소드들이 존재하고 각 유닛별로 보여지는게 틀리기 때문에 Display() 메소드를 오버라이드 하여 각각 고유의 형태를 보여지게 하였습니다. 하지만 문제가 발생했습니다 -_-;; 메딕은 공격을 못해야 정상인데 공격을 하게 되고, 더 문제가 되는건 SupplyDepot은 건물이기 때문에 움직이거나 공격하거나, 멈추거나 할 수 없는데 말이죠.. 따라서 상속을 하는것..
2007년도 1학기 완성된 시간표 'ㅅ')/ 시간 과목명 (교수명) 월 1 : 30 정보경제론 (이기석) 6 : 00 데이터베이스 관리론 (이춘열) 화 1 : 30 시스템 분석 및 설계 (정승렬) 3 : 00 자료구조 (김인규) 6 : 00 소프트웨어 공학 (김승렬) 수 10 : 30 객체지향 프로그래밍 (박수현) 2 : 00 디지털 사진 찍기 (박제성) 목 1 : 30 시스템 분석 및 설계 (정승렬) 3 : 00 자료구조 (김인규) 토탈 21학점 다 듣습니다~ (표에 나오지 않는 1학점은 정보소양인증 '컴퓨터와 인터넷' 입니다) 21학점이라는거 처음으로 신청해보는데 -.-;; 감회가 새롭습니다 ㅋㅋㅋㅋㅋㅋㅋㅋ 1학년때 공부좀 할걸.. 이런 생각도 들고.. 막 요래요.. -.-;; 몇가지만 제외하고 컴퓨터 사이언스 쪽으로 다 돌렸습니다. 경영 경제..
패턴 중독 패턴 중독에 관해 풍자 해 놓은 글이 있어서 읽어 보았다. (출처 : http://developers.slashdot.org) Of course those GoF patterns can make life hell for the maintenance developer or app framework user, when people turn it into a contest to see how many design patterns they can fit into a single project. The overall "Design Patterns" philosophy is really "how can I defer as many decisions as possible from compile time to run ..
RTP : 3장. 패턴 3장에서는 주로 패턴이 무엇을 의미하는지, 또 패턴 중독의 경우와 한 패턴이 여러 형태로 존재할 수 있는지를 설명한다. 패턴이란? 일단 패턴이라는것은 건축에서 부터 비롯된 말이다. 패턴은 세상에 발생하는 사물인 동시에, 그것을 어떻게 창조할 수 있는지, 그리고 언제 창조해야 하는지를 알려주는 규칙이다. 패턴은 과정인 동시에 대상이다. 살아있는 대상에 대한 기술이기도하고, 만들어내는 과정에 대한 묘사이기도 하다. 패턴 중독 http://developers.slashdot.org/comments.pl?sid=33602&cid=3636102 에 가면 패턴 중독을 풍자해 놓은 글이 있다. 패턴의 진정한 성과는 패턴을 현명하게 사용할때 난다. 리팩터링을 통해 점진적으로 패턴을 도입하면, 패턴으로 인한 과도한 설계..