요약 복합 패턴 모델-뷰-컨트롤러 알아보기 모델-뷰-컨트롤러에 사용되는 패턴 알아보기 모델-뷰-컨트롤러로 BPM 제어 도구 만들기 메모 모델-뷰-컨트롤러 알아보기 음악 소프트웨어를 비유로 들어보자. 새로운 노래를 재생한다. 사용자가 인터페이스를 건드리면 그 행동이 컨트롤러에게 전달됨. 컨트롤러에서 Player 모델에게 음악 재생을 요청함. MP3파일을 관리하고 재생하는 데 필요한 모든 상태, 데이터, 애플리케이션 로직 등은 모델에 들어있음. 모델에서 뷰에게 상태가 변경되었음을 알림. 디스플레이가 갱신되는 것을 볼 수 있고, 음악이 재생되는 것을 들을 수 있음. 뷰 디스플레이가 갱신됨. 모델 모든 데이터, 상태와 애플리케이션 로직이 들어 있음. 뷰와 컨트롤러에서 모델의 상태를 조작하거나, 가져올 때 필요한..
요약 복합 패턴 오리 시뮬레이션 게임에 다양한 패턴 적용하기 메모 CHAPTER 12. 패턴을 모아 패턴 만들기 : 복합 패턴 오리 시뮬레이션 게임에 다양한 패턴 적용하기 12. 오리 무리를 만듦. 오리를 1마리씩 관리하지 않고, 오리로 구성된 컬렉션을 다룰 방법이 필요함. 오리 객체로 구성된 컬렉션을 개별 객체와 같은 방식으로 다룰 수 있게 해주는 컴포지트 패턴을 사용함. p541 참고 13. 오리 무리(복합 객체)를 만든 것을 시뮬레이터에 적용함. p542 참고 14. 이번엔 개별 오리의 행동을 관찰하기 위해 옵저버 패턴을 적용함. QuackObservable 인터페이스를 추가함. Quacakble은 QuackObservable 인터페이스를 확장함. 15. Quackable을 구현하는 모든 구상클래스..
요약 복합 패턴 오리 시뮬레이션 게임에 다양한 패턴 적용하기 메모 오리 시뮬레이션 게임에 다양한 패턴 적용하기 12. 오리 무리를 만듦. 오리를 1마리씩 관리하지 않고, 오리로 구성된 컬렉션을 다룰 방법이 필요함. 오리 객체로 구성된 컬렉션을 개별 객체와 같은 방식으로 다룰 수 있게 해주는 컴포지트 패턴을 사용함. p541 참고 13. 오리 무리(복합 객체)를 만든 것을 시뮬레이터에 적용함. p542 참고 14. 이번엔 개별 오리의 행동을 관찰하기 위해 옵저버 패턴을 적용함. QuackObservable 인터페이스를 추가함. Quacakble은 QuackObservable 인터페이스를 확장함. 15. Quackable을 구현하는 모든 구상클래스에서 QuackObservable에 있는 메소드를 구현하도록 ..
요약 복합 패턴 패턴 섞어 쓰기 오리 시뮬레이션 게임에 다양한 패턴 적용하기 메모 CHAPTER 12. 패턴을 모아 패턴 만들기 : 복합 패턴 패턴 섞어 쓰기 여러 패턴을 함께 사용해서 다양한 디자인 문제를 해결하는 방법을 복합 패턴이라고 부름. 복합 패턴이라고 불리려면 여러 가지 문제의 일반적인 해결법을 제시해야 함. 반복적으로 생길 수 있는 일반적인 문제를 해결하는 ****용도로 2개 이상의 패턴을 결합해서 사용하는 것을 뜻함. 복합 패턴의 왕이라 불리는 모델-뷰-컨트롤러(MVC)를 알아본다. 오리 시뮬레이션 게임에 다양한 패턴 적용하기 우선 Quackable 인터페이스를 만듦. 모든 Duck 객체에 Qucakable 인터페이스를 구현함. 꽥꽥거리는 행동을 구현하는 quack() 메소드를 구현해야 함..
요약 프록시 패턴 디자인 도구상자 안에 들어가야 할 도구들 메모 디자인 도구상자 안에 들어가야 할 도구들 프록시 패턴 특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 개체)을 제공함.
요약 프록시 패턴 보호 프록시 만들기 객체마을 데이팅 서비스 Person 인터페이스용 동적 프록시 만들기 1단계 : Invocationhandler 만들기 호출 핸들러 만들기 2단계 : 동적 프록시 생성 코드 만들기 메모 보호 프록시 만들기 java.lang.reflect 패키지 안에 프록시 기능이 내장되어 있음. 즉석에서 하나 이상의 인터페이스를 구현하고, 지정한 클래스에 메소드 호출을 전달하는 프록시 클래스를 만들 수 있음. 진짜 프록시 클래스는 실행 중에 생성되므로 이러한 자바 기술을 동적 프록시(dynamic proxy)라고 부름 이번에는 프록시가 2개의 클래스로 구성됨. 자바에서 Proxy클래스가 Subject 인터페이스 전체를 구현함. Proxy 객체의 모든 메소드 호출을 전달받는 Invoca..
요약 프록시 패턴 프록시 패턴의 정의 원격 프록시와 가상 프록시 비교하기 앨범 커버 뷰어 만들기 앨범 커버 가상 프록시 설계하기 메모 프록시 패턴의 정의 📍 프록시 패턴(Proxy Pattern) : 특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)을 제공함. 프록시 패턴을 사용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체로의 접근을 제어하는 대리인 객체를 만들 수 있음. 프록시에서 원격 객체로의 접근을 제어하는 몇 가지 방법이 있음. 원격 프록시를 써서 원격 객체로의 접근을 제어할 수 있음. 가상 프록시(virtual proxy)를 써서 생성하기 힘든 자원으로의 접근을 제어할 수 있음. 보호 프록시(protection proxy)를 써서 접근 권한이 필..
요약 프록시 패턴 서버에 필요한 코드 살펴보기 작동 방식 클라이언트 코드 살펴보기 GumballMachine 클래스를 원격 서비스로 바꾸기 RMI 레지스트리 등록하기 GumballMonitor 클라이언트 코드 고치기 메모 서버에 필요한 코드 살펴보기 [원격 인터페이스] import java.rmi.*; public interface MyRemote extends Remote { public String sayHello() throws RemoteExceptionl; } [원격 서비스를 구현한 클래스] import java.rmi.*; import java.rmi.server.*; public class MyRemoteImpl extends UnicastRemoteObject implements MyRem..
요약 프록시 패턴 원격 프록시의 역할 모니터링 코드에 원격 프록시 추가하기 원격 메소드의 기초 자바 RMI의 개요 원격 서비스 만들기 1단계: 원격 인터페이스 만들기 2단계: 서비스 구현 클래스 만들기 3단계: rmiregistry 실행하기 4단계: 원격 서비스 실행하기 메모 원격 프록시의 역할 원격 프록시는 원격 객체의 로컬 대변자 역할을 함. 원격 객체란 다른 자바 가상 머신의 힙에서 살고 있는 객체를 뜻함. 다른 주소 공간에서 돌아가고 있는 객체 로컬 대변자란 로컬 대변자의 어떤 메소드를 호출하면, 다른 원격 객체에게 그 메소드 호출을 전달해 주는 객체를 뜻함. 클라이언트 객체는 원격 객체의 메소드 호출을 하는 것처럼 행동함. 하지만 실제로 로컬 힙에 들어있는 프록시 객체의 메소드를 호출하고 있음...
요약 프록시 패턴 모니터링 코드 만들기 메모 모니터링 코드 만들기 public class GumballMachine { // 기타 인스턴스 변수 String location; public GumballMachine(String location, int count) { // 기타 생성자 코드 this.location = location; } public String getLocation() { return location; } } 위치는 그냥 String 으로 저장함. 위치는 생성자로 전달되어 인스턴스 변수에 저장됨. 위치를 알려주는 용도로 호출할 수 있는 게터 메소드를 추가함. public class GumballMonitor { GumballMachine machine; public GumballMon..
요약 상태 패턴 상태 패턴의 정의 상태 패턴 vs 전략 패턴 보너스 알맹이 당첨 기능 추가하기 디자인 도구상자 안에 들어가야 할 도구들 메모 상태 패턴의 정의 📍 상태 패턴(State Pattern) : 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있음. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있음. State 인터페이스는 모든 구상 상태 클래스의 공통 인터페이스를 정의 함. 모든 상태 클래스에서 같은 인터페이스를 구현하므로, 바꿔가면서 쓸 수 있음 Context 클래스에서는 여러 가지 내부 상태가 들어있을 수 있음. 앞에서 살펴본 GumballMachine이 Context에 해당함. ConcreteState 는 Context로 부터 전달된 요청을 자기 나름의 방식으로 구현해..
요약 상태 패턴 새로운 디자인 구상하기 State 인터페이스 및 클래스 정의하기 State 클래스 구현하기 뽑기 기계 전체 코드 살펴보기 다른 상태 클래스 구현하기 뽑기 기계 구조 다시 살펴보기 메모 새로운 디자인 구상하기 기존 코드를 그대로 활용하는 대신, 상태 객체들을 별도의 코드에 넣고, 어떤 행동이 일어나면 현재 상태 객체에서 필요한 작업을 처리하게 함. 우선 뽑기 기계와 관련된 모든 행동에 관한 메소드가 들어있는 State 인터페이스를 정의한다. 기계의 모든 상태를 대상으로 상태 클래스를 구현한다. 조건문 코드를 전부 없애고 상태 클래스에 모든 작업을 위임한다. State 인터페이스 및 클래스 정의하기 State 인터페이스에는 뽑기 기계에서 일어날 수 있는 모든 행동에 직접적으로 대응함. ins..