본문 바로가기

OOP, FP

(37)
01. [스칼라 테트리스] 오픈 소스, 전체 클레스 분석 스칼라로 작성된 싱글 테트리스 스칼라로 테트리스를 만들어 보려고 한다.이 서비스와 유사한 서비스와 앱을 검색해서 알아보고 정리한다.깃헙에서 Scaltris라는 프로젝트를 발견했다.해당 프로젝트는 1인용 테트리스 게임이다.코드의 흐름을 분석한다.실행 방법우선 실행을 위해선 sbt 1.0이상의 버전이 필요하다.sbt 1.0.2를 설치한 뒤 프로젝트 디렉터리에서 sbt run 명령어를 실행하니 문제없이 실행되었다.프로젝트 설정 방법이클립스에 scala plugin을 설치한다.sbt에 이클립스 플러그인을 추가한 뒤 sbt eclipse 명령어를 입력하면 프로젝트를 이클립스에 import 할 수 있다.코드 분석 - 7개의 scala 클래스 파일이 있다.Scaltris.scala프로그램을 처음 실행하면 시작되는 메..
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)를 만들어서 이터레이터 패턴을 사용하면 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식을 통일할 수 있다.이렇게 접근 방식을 통일하게 되면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있다. 또 다른 중요한 점은 모든 항목에 ..