본문 바로가기

OOP, FP/디자인패턴

(20)
MVC, MVP, MVVM 패턴 다음주부터 시작되는 프로젝트에서 ext.js 를 사용한다고 한다. UI 컴포넌트들을 클래스 기반으로 사용할 수 있게 해주며 다양한 테마와 환경을 제공해준다. GPL라이센스로 무료 사용가능하고, private하게 사용하려면 라이센스를 구매해야한다. ExtJS는 애플리케이션 아키텍처로 MVVM 패턴을 제공한다. MVC 패턴도 버겁던 나에게 이러한 개량형 패턴은 더욱 생소했다. 추후에 다시 보기위해 내가 이해한 내용만 정리하려고 한다. 1. MVC 패턴(Model-View_Controller) 대학교 시절 JAVA를 공부하고 JSP로 웹을 만들게 되었을 때, 그러니까 객체고 뭐고 아무것도 모르던 시절에 팀프로젝트로 펜션 호스팅 사이트를 개발했었다. 펜션이 제공하는 방의 목록을 표시하는 JSP페이지 1 2 3 ..
헤드퍼스트 디자인 패턴: 15. MVC 패턴 지난 포스팅에선 여러 패턴을 섞어서 강력한 객체지향 디자인을 만드는 컴파운드 패턴에 대해 알아보았다. 이번에는 매우 강력한 컴파운드 패턴 중 하나인 MVC 패턴에 대해 복습한다. MVC 패턴 (1) View- 모델을 표현하는 방법을 제공하는 사용자 인터페이스. 일반적으로 화면에 표시하기 위해 필요한 상태 및 데이터를 모델에서 직접 가져온다. (2) Model- 모든 데이터, 상태 및 어플리케이션 로직이 들어있다. 뷰와 컨트롤러에서 모델의 상태를 조작하거나 가져오기 위한 인터페이스를 제공하고 모델에서 자신의 상태 변화에 대해서 옵저버들에게 알려주긴 하지만 기본적으로 모델은 뷰와 컨트롤러에 별 관심이 없다. (3) Controller- 뷰와 모델 사이에서 위치하며 사용자로부터 입력을 받아서 그것이 모델에게 ..
헤드퍼스트 디자인 패턴: 14. 컴파운드 패턴 지난 포스팅에선 객체에 대한 접근을 제어하는 프록시 패턴에 대해 알아보았다. 이번에는 여러 패턴을 섞어서 강력한 객체지향 디자인을 만드는 컴파운드 패턴에 대해 복습한다. 컴파운드 패턴두 개 이상의 패턴을 결합하여 일반적으로 자주 등장하는 문제들에 대한 해법을 제공한다. 컴파운드 패턴은 딱히 정해진 의미, 단점, 장점이 뚜렷하지 않다.패턴을 잘 활용하기 위해 서로 다른 패턴을 섞어 쓰는 디자인 방법이기 떄문이다. 다만 주의할 점은 패턴 몇 개를 결합해서 쓴다고 해서 무조건 컴파운드 패턴이 되는 것은 아니다.컴파운드 패턴이라고 불릴 수 있으려면 여러 가지 문제를 해결하기 위한 용도로 쓰일 수 있는 일반적인 해결책이어야 한다. 웹에서 벌어지는 다양한 요청과 이에 대응하는 로직을 처리하고 처리 결과를 브라우저로..
헤드퍼스트 디자인 패턴: 13. 프록시 패턴 지난 포스팅에선 객체 내부의 상태가 바뀜에 따라 객체의 행동을 바꿀 수 있는 스테이트 패턴에 대해 알아보았다. 이번엔 객체에 대한 접근을 제어하는 프록시 패턴에 대해 복습한다. 프록시 패턴어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴프록시는 보통 다른 객체에 대한 대변자라고 봐도 무방하다. 프록시는 자신이 대변하는 객체와 그 객체에 접근하고자 하는 클라이언트 사이에서 여러 가지 방식으로 작업을 처리한다.보안을 위해 인터넷을 통해 들어오는 메소드 호출을 쫓아내거나 게으른 객체들을 대신해 끈기있게 기다리는 일을 맡기도 한다. 프록시의 종류 (1) 원격 프록시 - 원격 프록시는 다른 JVM에 들어있는 객체의 대변인에 해당하는 로컬 객체이다. 프록시의 메소드를 ..
헤드퍼스트 디자인 패턴: 12. 스테이트 패턴 지난 포스팅에선 트리 구조를 구성하여 부분과 전체를 나타내는 계층구조로 표현할 수 있는 컴포지트 패턴에 대해 알아보았다. 이번에는 객체 내부의 상태가 바뀜에 따라 객체의 행동을 바꿀 수 있는 스테이트 패턴에 대해 복습한다. 스테이트 패턴객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 스테이트 패턴은 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임한다.따라서 내부 상태가 바뀌면 행동이 달라지게 된다.if, switch문과 같은 분기문을 패턴을 이용해 캡슐화, 분리한다고 생각하면 될 것 같다. 객체의 클래스가 바뀌는 것과 같은 이라는 표현을 쓴 이유는 무엇일까?클라이언트 입장에서는 사용하는 객체의 ..
헤드퍼스트 디자인 패턴: 11. 컴포지트 패턴 지난 포스팅에선 컬렉션의 구현 방법을 노출하지 않으면서도 그 칩합체 안에 들어있는 모든 항목에 접근할 수 있게 하는 이터레이터 패턴에 대해 알아보았다. 이번에는 트리 구조를 구성하여 부분과 전체를 나타내는 계층구조로 표현할 수 있는 컴포지트 패턴에 대해 복습한다. 컴포지트 패턴객체들을 트리 구조로 구셩하여 부분과 전체를 나타내는 계층구조로 만든다.컴포지트 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체(Composite)를 똑같은 방법으로 다룰 수 있다. 트리 구조는 IT 전공자들에게 익숙한 구조이다.우리가 컴퓨터를 할 때도 쉽게 접할 수 있다. 윈도우에 로그인하면 바탕화면에 여러 가지 폴더와 파일이 있다.폴더 안에는 다시 폴더 혹은 파일이 존재한다. 이런식으로 하나의 부모에 ..
헤드퍼스트 디자인 패턴: 10. 이터레이터 패턴 지난 포스팅에선 알고리즘의 골격을 정의하여 일부 단계를 서브클래스에서 구현하게 하는 템플릿 메소드 패턴에 대해 알아보았다. 이번엔 컬렉션의 구현 방법을 노출하지 않으면서도 그 칩합체 안에 들어있는 모든 항목에 접근할 수 있게 하는 이터레이터 패턴에 대해 복습한다. 이터레이터 패턴집합체 내에서 어떤 식으로 일이 처리되는지에 대해서는 전혀 모르는 상태에서 그 안에 들어있는 모든 항목들에 대해 반복작업을수행할 수 있게 해주는 패턴. 반복자(Iterator)를 만들어서 이터레이터 패턴을 사용하면 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식을 통일할 수 있다.이렇게 접근 방식을 통일하게 되면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있다. 또 다른 중요한 점은 모든 항목에 ..
헤드퍼스트 디자인 패턴: 9. 템플릿 메소드 패턴 지난 포스팅에선 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공하는 퍼사드 패턴에 대해 알아보았다. 이번엔 알고리즘의 골격을 정의하여 일부 단계를 서브클래스에서 구현하게 하는 템플릿 메소드 패턴에 대해 복습한다. 템플릿 메소드 패턴메소드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다.이 패턴을 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있다. 템플릿 메소드 패턴은 알고리즘의 틀을 만들기 위해서 사용한다. 여기서 틀이란 그저 메소드에 불과하다.즉, 일련의 단계들을 정의한 메소드이다. 여러 단계 가운데 하나 이상이 추상 메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현된다.서브클래스에서 일부분을 구..