KWSStudy
MP3에대한 MVC 디자인 패턴의 관계에서 바라본 MVC 사용자는 뷰하고만 접촉할 수 있다. 컨트롤러에서 모델한테 상태를 변경하라는 요청을 한다. 컨트롤러에서 뷰를 변경해 달라고 요청할 수도 있다. 상태가 변경되면 모델에서 뷰한테 그 사실을 알린다. 뷰에서 모델한테 상태를 요청한다. 패턴 안경을 끼고 MVC를 살펴보자 스트래티지 패턴의 적용 원칙 자주 바뀌는 부분(기능)을 바뀌지 않는 부분과 분리하여 캡슐화 한다. 스트래티지 패턴(뷰와 컨트롤러) - 뷰 객체를 여러 전략을 써서 제공한다. 전략은 컨트롤러가 제공한다. 뷰에서는 애플리케이션의 겉모습에만 신경을 쓰고, 인터페이스의 행동에 대한 결정은 모두 컨트롤러한테 맡긴다.
정의 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 클라이언트에서 메소드 호출시 호출을 중간에 가로채어 메소드 호출/ 접근제한등을 한다. 프록시 종류 원격(Remote Proxy) 프록시 가상(Virtual Proxy) 프록시 동적(Dynamic Proxy) 프록시 보호(Protection Proxy) 프록시 원격(Remote Proxy) 프록시 다른 jvm에 들어있는 객체의 대변인에 해당하는 로컬 객체. 프록시의 메소드를 호출하면, 그호출이 네트워크를 통해 전달되어 원격객체의 메소드가 호출, 결과는 프록시를 통해 클라이언트에게 전달됨. 가상(Virtual Proxy) 프록시 생성비용이 많이드는 객체를 대신하는 역할.
스테이트(State) 패턴 스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. 뽑기 기계의 상태 변화 객체의 상태에 따라서 실행되는 행위가 달라져야 할 때 → 객체 내부에서 if 절 또는 switch - case 절 의 전개 // 동전을 투입하는 행위 public void insertQuarter() { if (state == HAS_QUARTER) { System.out.println("동전은 한 개만 넣어주세요."); } else if (state == NO_QUARTER) { state = HAS_QUARTER; System.out.println("동전을 넣었습니다."); } else if (state == SOLD_OUT) { System.out.println("매진되었습니다.
이터레이터 패턴의 정의 이터레이터 패턴은 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공한다. 이 패턴을 이용하면 집합체 내에서 어떤 식으로 일이 처리되는지에 대해서 전혀 모르는 상태에서 그 안에 들어있는 모든 항목들에 대해서 반복작업을 수행할 수 있다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있기 때문이다. 쉽게 설명하면 컬렉션들을 공통된 인터페이스를 구현하게 함으로써 공통된 방법으로 모든 항목에 접근할 수 있는 방법이다.
정의 서로 다른 클래스들의 알고리즘이 공통될 때(상세 기능이 아닌 일반적인 관점에서) 공통된 알고리즘을 슈퍼클래스에서 정의하고 일부 다른부분은 추상 메소드로 정의하여 서브클래스에서 구현하는 패턴 템플릿 메소드 패턴의 특징 코드의 재사용에 크게 도움된다. 클래스간의 의존성을 낮춰준다. 프레임워크를 만들때 자주 사용되는 패턴이다. 변경이 일어나지 않는 부분은 슈퍼 클래스에서 final로 지정하여 오버라이드하지 못하게 막는다 템플릿 메소드 디자인 원칙(책에서는 헐리우드 원칙이라 나옴) 저수준 구성요소가 고수준의 구성요소를 직접 호출할 수 없다.(고수준의 구성요소에서 호출하기전에 저수준 구성요소는 대기한다.) 클래스의 주요 기능은 고수준 구성요소에서 장악하고 구현이 필요한 기능만 저수준 클래스를 호출한다.