단도 직입적으로 Mediator Pattern은 로직을 전부 하나의 클래스에 일임하는 것이다. 일반적으로 프로그램은 수 많은 클래스들로 이루어져 있다. 수 많은 클래스들은 서로 복잡한 로직 속에 엃혀있다. 이는 프로그램의 가독성을 떨어뜨리고 개발 및 유지/보수를 힘들게 한다. 결론적으로 결합도를 높이게 된다.





 이에 대한 해결책으로 각 클래스들의 Comunication을 캡슐화하여 하나의 객체에게 일임하는 것이다. 이는 클래스 간의 결합도를 낮추고 로직을 하나의 객체에 일임함으로써 유지/보수를 편리하게 해준다.


참고 : http://en.wikipedia.org/wiki/Mediator_pattern

'Programming > Patterns' 카테고리의 다른 글

[Pattern]Mediator Pattern  (0) 2013.12.03
[Pattern]MVVM Pattern  (0) 2013.12.03
[Pattern]Observer Pattern  (0) 2013.08.25
[Pattern]MVC Pattern과 MVP Pattern 그리고 차이  (0) 2013.04.10
[Pattern]State Pattern과 Strategy Pattern  (0) 2012.10.09
[Pattern]Singleton Pattern  (0) 2012.09.21

 MVVM 패턴이란 즉, Model-View-View Model을 말한다. MVC 패턴과 비슷해 보이지만 MVC와는 엄연히 다른 패턴이다. 먼저 MVC 패턴부터 다시 보자.



 MVC 패턴은 Model-View-Controller로 각 부분을 나누어 데이터를 저장하는 Model, 사용자와의 end-point인 View, 그리고 View의 이벤트에 반응하고 Model의 데이터를 조작하는 Controller로 나뉘는 패턴이다. 각 부위의 결합도를 낮춤으로써 구현 및 유지/보수의 편의성을 향상시킨다. 그럼 MVVM은 무엇일까?




 간단히 말해 MVVM은 Controller 대신에 View Model을 사용하는 것이다. UI 플랫폼이 발달하면서 UI에 관한 데이터와 커맨드는 다양하고 복잡해지기 시작했다. Controller와 Model보다 View의 비중이 높아지면서 각 View의 데이터와 커맨드를 모두 가지고 있는 View Model을 사용하게 된것이다. View Model을 이용하고 각 View의 커맨드와 데이터를 각 View Model이 가지게 되면서 개발이 더욱 직관적으로 바꼈다. 또한 Controller와 Model과의 연관 관계를 최소화 시켜 결합도를 낮추는데 기여하는 패턴이다.


참고 : http://en.wikipedia.org/wiki/Model_View_ViewModel

'Programming > Patterns' 카테고리의 다른 글

[Pattern]Mediator Pattern  (0) 2013.12.03
[Pattern]MVVM Pattern  (0) 2013.12.03
[Pattern]Observer Pattern  (0) 2013.08.25
[Pattern]MVC Pattern과 MVP Pattern 그리고 차이  (0) 2013.04.10
[Pattern]State Pattern과 Strategy Pattern  (0) 2012.10.09
[Pattern]Singleton Pattern  (0) 2012.09.21


ObserverPattern.pptx


 객체들 사이에 1:N의 의존관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 갱신될 수 있게 만드는 패턴입니다.




 Observer를 상속받아서 ConcreteObserver를 구현합니다. 구현한 ConcreteObserver의 notify()는 객체의 상태가 변할 때 이를 반영할 알고리즘을 구현합니다. Subject에 구현해 놓은 ConcreteObserver를 registerObserver(Observer o)를 이용해 observerCollection에 등록합니다. 등록한 ConcreteObserver는 Subject의 notifyObserver()를 통하여 호출됩니다. 즉, 개발자는 각각의 Observer들을 일일이 갱신할 필요없이 Subject에 등록함으로써 한번에 갱신이 가능하도록하는 유용한 디자인 패턴입니다.


'Programming > Patterns' 카테고리의 다른 글

[Pattern]Mediator Pattern  (0) 2013.12.03
[Pattern]MVVM Pattern  (0) 2013.12.03
[Pattern]Observer Pattern  (0) 2013.08.25
[Pattern]MVC Pattern과 MVP Pattern 그리고 차이  (0) 2013.04.10
[Pattern]State Pattern과 Strategy Pattern  (0) 2012.10.09
[Pattern]Singleton Pattern  (0) 2012.09.21

    모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. 

MVC

모델(Model)은 애플리케이션의 정보(데이터)를 나타낸다.

뷰(View)는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다. 

컨트롤러(Controller)는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

=밑의 그림은 스탠포드에서 iOS 프로그래밍을 강연할 때, MVC를 가르치는 그림이다.





MVC 참고 : http://en.wikipedia.org/wiki/Model–view–controller

 

    모델-뷰-프레젠터(Model–View–Presenter, MVP 소프트웨어 공학에서 사용되는 아키텍처 패턴 중 하나이다. MVC 패턴에서 유도된 패턴이다. 패턴을 도식화하면 밑의 그림과 같다. MVC의 View에 남아있는 모든 비지니스 로직을 전부 Presenter로 통합 했다는데에 있다. 이는 MVC에서 View와 Controller에 조금이나마 남아있던 결합도 마저 낮추게 된다. 결국 같은 View를 사용하더라도 이에 연결된 Presenter의 로직에 관하여 완전히 다른 로직을 구현할 수 있게 됨으로써 유지/보수의 편리를 추구하는 패턴이다.

MVP

모델(Model)은 애플리케이션의 정보(데이터)를 나타낸다.

뷰(View)는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다. 

프레젠터(Presenter)는 MVC의 Controller와 비슷하다. 다만, 다른 점이 있다면 View의 남아 있는 모든 비지니스 로직을 전부 Presenter로 통합 했다는데에 있다.




MVC와 MVP의 차이

MVC는 하나의 Controller에서 여러 View를 관장할 수 있으나, MVP는 각 View마다 Presenter가 할당된다.

MVC에서 Controller에서 user event를 처리하지만, MVP는 View에서 user event를 받는다.

MVC에서는 Controller에서 user event에 따른 데이터 로직을 수행한다. MVP에서 View는 오로지 user event를 Presenter로 전달만 할 뿐이다.





MVP 참고 : http://en.wikipedia.org/wiki/Model-view-presenter

저장저장


저장저장저장저장


저장저장


저장저장

'Programming > Patterns' 카테고리의 다른 글

[Pattern]Mediator Pattern  (0) 2013.12.03
[Pattern]MVVM Pattern  (0) 2013.12.03
[Pattern]Observer Pattern  (0) 2013.08.25
[Pattern]MVC Pattern과 MVP Pattern 그리고 차이  (0) 2013.04.10
[Pattern]State Pattern과 Strategy Pattern  (0) 2012.10.09
[Pattern]Singleton Pattern  (0) 2012.09.21

프로젝트 네이버 개발자센터 URL : http://developer.naver.com/projects/dpviedorental


 State Pattern과 Strategy Pattern을 이용하여 기존의 코드는 최대한 건드리지 않고 클라이언트 코드만 수정하여 구현하도록 만들었다. 아직 디자인패턴을 배우는 단계이지만 최대한 OCP를 지키면서 구현하려고 노력했다.


객체지향에서는 모든 변화의 단위를 클래스로 표현한다. 그렇게 작성해야 차후에 변경(유지/보수)이 편리하기 때문이다. 변화의 단위 중에 상태와 전략(알고리즘)을 구현하는 설계패턴에 대해서 알아보자.


State Pattern

스테이트 패턴은 상태를 클래스로 표현한다. 상태를 클래스로 표현하면 상태의 변화를 클래스의 교체를 통해서 나타낼 수 있다. 새로운 상태를 추가하는 경우에 무엇을 프로그램하면 되는지 명확해진다. IF문등을 이용해서 상태를 나타내는 flag를 확인할 필요없이 클래스 자체가 상태를 표현하게 되기 때문에 클라이언트 코드도 간결해진다.


Strategy Pattern

스트레티지 패턴을 이용하면 알고리즘을 사용하는 클라이언트에 상관없이 독립적으로 알고리즘을 다양하게 변경이 가능해진다. 알고리즘을 변경할 때, 메소드가 선언되어 있는 클래스 혹은 인터페이스를 이용하여 메소드를 정의해서 사용하면 기존의 코드를 건드리지 않고 클라이언트의 알고리즘 변경이 손쉽게 이루어진다.

'Programming > Patterns' 카테고리의 다른 글

[Pattern]Mediator Pattern  (0) 2013.12.03
[Pattern]MVVM Pattern  (0) 2013.12.03
[Pattern]Observer Pattern  (0) 2013.08.25
[Pattern]MVC Pattern과 MVP Pattern 그리고 차이  (0) 2013.04.10
[Pattern]State Pattern과 Strategy Pattern  (0) 2012.10.09
[Pattern]Singleton Pattern  (0) 2012.09.21

 프로그래밍을 하다보면 공통된 객체를 여러 객체에서 사용할 때가 생긴다. 그럴 때, 싱글톤 패턴을 이용하면 상당히 깔끌하게 해결된다. 싱글톤을 이용하는 코드는 밑에와 같다.


public class Instance {

private static Instance instance;

public Instance(){

}

public static Instance getInstance(){

if(instance == null){

System.out.println("make Single Instance");

instance = new Instance();

}

return instance;

}

public void testInstance(){

System.out.print("test Singleton Instance");

}

}


 테스트를 위해서 싱글톤을 사용하는 간단한 코드를 사용해서 돌려봤다. 테스트 코드는 싱글톤 객체의 testInstance()라는 메소드를 10번 호출하는 코드이다. 밑의 그림과 같이 처음에 객체를 생성한 후에 계속해서 같은 객체를 사용하는 모습을 알 수 있다.



'Programming > Patterns' 카테고리의 다른 글

[Pattern]Mediator Pattern  (0) 2013.12.03
[Pattern]MVVM Pattern  (0) 2013.12.03
[Pattern]Observer Pattern  (0) 2013.08.25
[Pattern]MVC Pattern과 MVP Pattern 그리고 차이  (0) 2013.04.10
[Pattern]State Pattern과 Strategy Pattern  (0) 2012.10.09
[Pattern]Singleton Pattern  (0) 2012.09.21

+ Recent posts