전체 글 473

커맨드 패턴 II

Invoker loading ... ① 클라이언트에서 커맨드 객체 생성 ② setCommand()를 호출하여 인보커에 커맨드 객체를 저장 ③ 나중에 클라이언트에서 인보커한테 그 명령을 실행시켜 달라는 요청을 함 public interface Command{ public void execute(); } // 주문서에 해당하는 인터페이스. (백지 상태의 주문서) public class PizzCookCommand implements Command{ // 주문서 인터페이스를 구현한 클래스 // 주문서에는 주문할 메뉴와, 어느 주방장이 요리 할 지에 대한 정보가 있다. Cooker cooker; // 리시버 클래스(주방장) public PizzCookCommand (Cooker cooker){ //생성자에 요리..

커맨드 패턴 I

** 호출 캡슐화 ** 한차원 높은 단계의 캡슐화 - 메소드 호출을 캡슐화한다. 메소드 호출을 캡슐화하면 계산 과정의 각 부분들을 결정화시킬 수 있기 때문에, 계산하는 코드를 호출한 객체에서는 어떤 식으로 일을 처리해야 하는지에 대해 전혀 신경 쓰지 않아도 된다. 그냥 결정화된 메소드를 호출해서 필요한 일만 잘 할 수 있으면 된다. 그 외에도 캡슐화된 메소드 호출을 로그 기록용으로 자장을 한다거나 취소 기능을 구현하기 위해 재사용하는 것과 같이 신기한 작업을 할 수도 있다. 커맨드 패턴과 유사한 형태의 실생활 패턴 고급 식당 운영 패턴 1. 고객이 웨이트리스한테 주문을 한다. 2. 주문서에 주문한 메뉴가 적힌다. 3. 웨이트리스는 주문서를 받아서 카운터에 갖다 주고는 "주문 받아요!" 라고 얘기 한다. ..

아이디어 발상 기법 3가지

(1) 브레인스토밍(brainstorming) 방법 브레인스토밍(brainstorming) 방법이란 여러 사람이 모여 어느 한 문제에 대한 아이디어를 공동으로 내어놓는 회의 방식의 집단사고 방식이다. 이 방법은 광고회사의 알렉스. F. 오스본에 의해 창안된 방법으로 여러 사람이 모여서 어느 한 주제에 대해 다양한 아이디어를 공동으로 내놓는 방법으로 집단사고를 통해 사고의 확산을 추구하는 회의 방식이다. 즉, 폭풍이 몰아치듯 두뇌를 자극하여 집단의 효과를 살리고 아이디어의 연쇄반응을 얻고자 하는 것이다. 따라서, 이 방법의 중점은 아이디어의 질보다는 많은 아이디어의 생산에 있다고 보면 가장 이해하기가 쉽다. "백지장도 맛들면 낫다"라는 속담이 있듯이 어떤 문제가 생겼을 때 여러 사람이 함께 풀면 그 문제의..

좋은글귀 2007.07.18

하루 계획표

평일 07:50 기상 아침밥 먹기 09:00 회사 도착 일은 빨리 끝내고 내 공부 하기 18:00 퇴근 아무리 늦어도 20:00 에는 퇴근하기 19:00 또는 21:00 헬스장 도착 - 2시간동안 헬스 21:00 또는 23:00 집 도착 - 2시간 이상 공부하기 24:00 또는 01:00 취침 ※ 이 가이드라인은 항상 지켜야 하는 규칙이 아니라, 내가 지향해야 할 바를 밝히고 있을 뿐 이다. 이 가이드라인을 완전히 습득한 상태에서 생활 할 때 항상 이 가이드라인을 염두에 둔다면, 원칙을 지키지 못하게 되더라도 원칙을 지키지 못한다는 걸 확실히 알고 있는 상태에서 그렇게 할 테고, 불가피한 상황에서만 합리적인 이유를 바탕으로 그렇게 하게 될 것이 다. 예를 들어, 회사 회식이나 프로젝트 기간 때문에 회사에..

일기 2007.07.18

원칙을 지키는 데 도움이 될만한 가이드라인...

다음과 같은 가이드라인을 따르면 의존성 뒤집기 원칙에 위배되는 객체지향 디자인을 피하는 데 도움이 된다. 1. 어떤 변수에도 구상 클래스에 대한 레퍼런스를 저장하지 말자. - new 연산자를 사용하면 구상 클래스에 대한 레퍼런스를 사용하게 되는 것이다. 팩토리를 써서 구상 클래스에 대한 레퍼런스를 변수에 저장하는 일을 미리 방지하자. 2. 구상 클래스에서 유도된 클래스를 만들지 말자 - 구상 클래스에서 유도된 클래스를 만들면 특정 구상 클래스에 의존하게 된다. 인터페이스나 추상 클래스처럼 추상화 된 것으로부터 클래스를 만들어야 한다. 3. 베이스 클래스에 이미 구현되어 있던 메소드를 오버라이드 하지 말자 - 이미 구현되어 있는 메소드를 오버라이드한다는 것은 애초부터 베이스 클래스가 제대로 추상화 된 것이..

팩토리 - 팩토리 메소드 패턴

팩토리 패턴(사실 간단한 팩토리는 디자인 패턴이라고 할수 없다) 모든 팩토리 패턴에서는 객체 생성을 캡슐화한다. 장점 : 객체를 인스턴스화하는 작업을 한 클래스에 캡슐화시켜 놓으면 구현을 변경해야 하는 경우에 여기저기 다 들어가서 고칠 필요 없이 팩토리 클래스 하나만 고치면 된다 팩토리 메소드 패턴의 정의 : 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스(추상메소드)를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다. 객체를 인스턴스화하는 일을 하는 메소드(팩토리 클래스로 캡슐화 된 메소드)를 생성된 객체를 사용할 클래스에 추상메소드로 만든다. 물론 해당 클래스는 추상클래..

데코레이터 패턴

클래스의 소스변경없이 추가기능을 동적으로 추가시키는 패턴. 데코레이터 패턴을 적용한 사례는 java.io 패키지에 많이 있다. Reader reader = new BufferedReader(new InputStreamReader(System.in)); ==> 풀어보면... Reader reader = new InputStreamReader(System.in); reader = new BufferedReader(reader); 정의 - 객체에 추가 요소를 동적으로 더할 수 있습니다. 데코레이터를 사용하면 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공합니다.

JVM(Java Virtual Machine)

JVM은 Java Virtual Machine의 약자이다. Machine이라는 말이 들어가 있긴 하지만, 실제로는 소프트웨어이다. Machine이라는 말이 들어간 이유는 JVM이 실제적으로 CPU와 같은 역할을 하기 때문인 것이라고 추정된다. 프로그램은 CPU 위에서 돌아가게 된다. 따라서 C나 C++과 같은 일반적인 프로그램 언어에서 컴파일하여 생성된 코드는 바로 해당 CPU에서 실행이 가능한 코드이다. 하지만 자바 소스코드(*.java)를 컴파일한 경우 생성되는 클래스파일(*.class)은 직접 CPU에서 동작할 수 있는 코드(native code)가 아니다. 생성된 클래스파일은 중간단계의 언어라고 할 수 있는 byte code로 이루어져 있다. 바로 이 byte code를 실행시키기 위한 가상적인 ..

옵저버 패턴

출판사+구독자=옵저버 패턴 1. 신문사가 사업을 시작하고 신문을 찍어내기 시작합니다. 2. 독자가 특정 신문사/잡지사에 구독 신청을 하면 매번 새로운 신문/잡지가 나올 때마다 배달을 받을 수 있습니다. 계속 구독자로 남아있는 이상 계속해서 신문/잡지를 받을 수 있습니다. 3. 신문을 더 이상 보고 싶지 않으면 구독 해지 신청을 합니다. 그러면 더 이상 신문이 오지 않습니다. 4. 신문사가 계속 영업을 하는 이상 여러 개인 독자, 호텔, 항공사 및 기타 회사 등에서 꾸준히 구독 및 해지를 하게 됩니다. 옵저버 패턴(Observer Pattern)에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many)의존성을 정의합니다...