본문 바로가기

전체 글

(678)
Factory Method Pattern ① Simple Factory 책을 시작하면서 new에 대한 고찰이 나옵니다. 처음에 스트레티지 패턴을 배우면서 나왔던 디자인 원칙 중에 하나죠, 특정 구현보다는 인터페이스를 바탕으로 프로그래밍 한다는 원칙입니다. 하지만 new를 사용하는 것 자체가 결국은 특정 구현을 사용하는것이라는 내용입니다. 스타크래프트 좋아하시죠? 프로토스 유닛들 여러가지가 있습니다. 이걸 인퍼테이스 라고 합시다. 그러면 이 프로토스 유닛을 구현하는 구상 클래스들에는 질럿이나 드라군, 프로브, 캐리어 등등 뭐 여러가지가 있겠지요, 이렇게 구상 클래스들이 많은 경우에는 조건문을 사용해서, 특정 유닛을 생성해 줘야겠지요. 이 조건문을 사용한 부분을 변하는 부분이라고 할 수 있습니다. 특히나 객체 생성을 처리하는 클래스를 팩토리(Factory) 라고 부른다고 하는데..
Decorator Pattern ③ 적용 및 정리 일단은 데코레이터 패턴에 대한 정의는 이렇습니다. 테코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. -_-; 당췌 뭐라고 하는건지 알수가 없네요.. 역시나 말로 하는것보다는 그림으로 보면서 이해하는편이 훨씬 빠를것 같다는 생각이 듭니다. 뭔가 정의 내리는 건 책에서도 처음부터 하고 있지 않는걸 보니 정의는 언제나 그럴싸 하기때문에 온갖 어려운 미사여구로 장식되어 있기 때문에 와닿지 않는 것 같네요. 그럼 멋진말 다 뒤집어 엎고 이해하기 위해서.. 다른방법으로 접근을 합시다! 인터넷을 통해서 아래와 같은 다이어그램을 구할 수 있었습니다. 이것이 데코레이터 패턴의 일종의 모형이라고 볼수가 있는데요. ..
Decorator Pattern ② Open Closed Principle OCP(Open Closed Principle) 에 대해서는 Agile Java 스터디를 하면서 한번 발표한 내역이 있기 때문에 책을 보면서 그렇게 생소한 개념은 아니었습니다. 디자인 원칙중에서 가장 중요한 원칙중에 하나라고 소개하고 있는 OCP는 약간은 모순적인 개념입니다. 확장에 대해서는 열려있고, 코드 변경에 대해서는 닫혀 있다.뭔가 동시에 만족할 수 없는 조건입니다만, 실제 코드를 변경할 수 없는 상황에도 시스템을 확장할 수 있게 해주는 객체지향 기법이 있다고 합니다. -_- 헉.. 그게 바로 앞서 배웠던 옵저버 패턴이라고 합니다. 아 그렇군요.. 생각해보니 옵저버 패턴에 몬스터와 싸우는 플레이어를 추가(확장에 열려있는 경우)해주는데는 몬스터의 코드에 전혀 영향을 미치지 않았었군(변경에 닫혀있는 ..
Decorator Pattern ① 문제점의 시작 데코레이터 패턴 공부를 하면서, 영화표를 파는 걸 한번 만들어 보자.. 생각했습니다. 일단 클래스를 만들어 봤는데요.. 개괄적인 클래스의 모습이 이러했습니다. 'ㅅ' ㅋㅋ 아주 간단합니다. 그냥 연령별로 티켓을 만들어 주면되구요.. 가격이라던가, 어떤 연령대의 티켓인지만 알수 있으면 되죠.. 굉장히 간단하구나.. 생각했는데 하나 의문점이 들었습니다. 보통 영화관에서는 카드로 할인을 해주는데.. 이런 할인 서비스를 구현하기 위해서는 어떻게 해야될까?? 생각했습니다. 또, 이런 할인이 중복되어서 할인이 되는 경우를 생각해봤습니다. -_-;; 4가지의 형태(일반, 청소년, 경로, 아이) 의 티켓 요금이 존재하고, 또 할인되는 경우가 3가지 라면.... 머릿속이 복잡합니다.. 계산을 해보니 약 32개의 클래스가..
RTP Session 1. Replace Constructors with Creation Methods Replace Constructors with Creation Methods 하지만, 컴퓨터 생성자를 사용하면 둘중 하나만 구입하는 경우는 만들수가 없습니다. 왜냐면 사운드 카드를 추가하는 경우와 그래픽 카드를 추가하는 경우에 생성자 오버로딩의 원칙(타입과 갯수가 다른 경우)에 위배되기 때문입니다. 따라서 컴파일 에러가 발생합니다. 그럼 이런 경우에는 어떻게 해야될까요?? 참으로 난감한 일이 아닐 수 없습니다!! 책에 이런 내용이 있습니다. 이게 키워드가 될 수 있을까요? 어 떤 클래스의 인스턴스를 생성할 때 그것이 제공하는 여러 생성자 중 어떤 것을 호출해야 할지 결정하기가 어렵다면, 인스턴스를 생성해 리턴하는 생성 메서드(Creation Method)로 각 생성자를 대체하여 그 용도가 명확히 드러나도..
RTP Session 1. Chain Constructors RTP 4, 5장에서는 어떤 방식으로 세션을 나누어 놓았고, 어떤 방식으로 패턴을 활용한 리팩토링에 접근하는지 전반적인 책을 보는 방법에 대해서 정리를 해 놓았고, 그래서 4장, 5장에 대한 정리는 하지 않았습니다. 먼저 세션은 총 21개로 되어있습니다. 그중에 첫 세션은 Replace Constructors with Creation Methods (생성 메소드로 생성자를 대체하기), Chain Constructors (연쇄 생성자) 입니다. 공부를 하던 도중에 순서가 연쇄 생성자 부터 하는 것이 좋겠다고 생각이 되어서 먼저 연쇄 생성자를 다루도록 하겠습니다. Chain Constructors public class Computer { private int cost; private String mainB..
Observer Pattern ③ 정리 옵저버 패턴에서는 느슨한 결합(Loose Coupling)이라는 객체 디자인을 제공합니다. 그럼 느슨하게 결합 되어 있다는 이야기가 무슨 이야기가 될까요?? 책에는 상호작용을 하지만 서로간에 대해 서로 잘 모른다는 것을 의미 한다고 합니다. 말이 너무 어려워서 만든 소스코드를 보면서 이해해 보도록 하겠습니다. 몬스터(주제)는 플레이어에 대해서 아는 정보라고는 인터페이스 정보 뿐입니다. public void notifyPlayer() { for (int i = 0; i < list.size(); i++) { Player player = (Player) list.get(i); player.update(weakness, frenzy); } } 이처럼 플레이어를 구현한 객체에 대한 정보 없이 단순히 인터페이스에..
2. 6. 산희형, 진자누나랑 점심식사 오랜만에 만난 두분, 산희형은 머리가 더 멋있어 졌어요 ㅋㅋ 진자누나가 말한거 처럼.. 진짜 더 디자이너 다워졌다고나 할까용? ㅋㅋㅋ 진자누나는 여전히 카메라 피하는건 여건하시공 ㅋㅋㅋ 이건 진자누나가 찍어준 사진.. ㅋㅋㅋ 빵먹는거네 -ㅅ-;; 이건 우리집 개새.. 아까부터 이러고 있음.. -_-;; 발져려 ㅠㅠ