예전에 플렉스를 사용해서 작은 RIA Application을 개발한 적이 있다. 기존에 MS의 WPF를 통해 RIA에 대한 기본을 그릴 수 있었는데, 막상 플렉스를 접하고 나니 WPF처럼 화면을 추가하고 쉽게 객체로 생성할 수 있는 부분이 없었다.(MS의 Visual Studio는 그런 의미에서 참으로 뛰어나다.) 그래서 내가 가장 많이 고민한 것은 어떻게 하면 플렉스의 코드를 분할하고 화면을 분할할 수 있는가 였다. 하지만 내가 아는 것이라곤 팝업창을 띄울 때 MXML을 사용해서 include할 수 있다는 정도? 시간날 때 모듈화에 대해 한번쯤 공부해 보려고 했는데 이번 Flex 3 Training from the source를 통해 좀 더 자세히 알 수 있게 된 것 같다.

사용자 삽입 이미지
보다시피 플렉스에서 파일 하나를 생성할 때에도 이와 같이 수 많은 케이스가 있다. 물론, 이에 대한 설명은 우수한 국내 플렉스 개발자들의 플랙스 문서 한글화 프로젝트 를 참조하면 좋다. 아래쪽에 플렉스에서 사용할 수 있는 리소스에 대한 설명이 나와있는데, 처음 시작하는 입장에서는 다른 것보다 "MXML Component" 와 "ActionScript Class"에 대해서 이해할 수 있다면 모듈화에 대해 보다 더 쉽게 접근할 수 있을 것 같다. 나도 이 책에서 처음에 이 두가지에 대한 설명을 듣고 나서는 모듈화에 대해 보다 더 쉽게 생각할 수 있었으니깐 말이다.

MXML Component : 화면의 모듈화
사용자 삽입 이미지


MXML Component는 플렉스에서 사용하는 MXML(아마 macromedia extensible markup language겠지?)의 화면을 분할하는 역할을 한다. 일종의 화면 모듈화 인데, 물론 화면에 독립되게 액션스크립트 코드를 사용할 수 있다.
이 컴포넌트는 부모 MXML코드의 <mx:Application> 테그의 xmlns:v="views.*" 이런 식으로 선언되고 화면 내에서는 <v:Function_Name/> 형식으로 사용된다.
따라서 화면을 설계할 때에는 두 가지 방법이 있는데 하나는 전체 화면을 설계한 후, 컴포넌트 단위로 자르는 작업을 하던지 아니면 최초부터 자식들(컴포넌트)을 제작한 후 부모에게 덛붙히는 방법이 있는데, 둘 다 장단점이 있기 마련이다.
또한 컴포넌트를 만들었다고 해서 부모에서 꼭 그 객체를 당장 화면에 보여주라는 법은 없다. 때문에, 사용자에게 어떤 상황에 따라 미리 구성된 다양한 화면이 있다면 viewState에 따라 다양한 컴포넌트를 보여줄 수도 있고, 혹은 화면의 액션에 따라 다이나믹하게 컴포넌트를 통해 정보를 보여주고 감출 수 있다.

Action Script File/Class : 코드의 모듈화
Action Script 는 기존에 플래시에서 사용되던 일종의 언어이긴 한데, 2.0 까지는 사실 개발자인 내가 보면 "아니 이건 외계어구나." 라는 생각이 들었다. 뭐 따지고 보면 거의 문법이 아주 심하게 다르다고 할 수는 없지만, 보통 플래시 개발자들이 사용하는 것을 보면 콜백 함수를 많이 사용한다.(내가 아는 개발자는 뭐 그냥 도배를 해댄다.) 내가 RIA의 이벤트 개념을 잘 모르는 상태에서는 정말로 외계어처럼 보였는데, 어떻게 보면 플래시라는 것 특성상 프로그래밍을 입히기 위해서는 그럴 수도 있다고 생각했다.
여하튼 플렉스 3 은 액션스크립트 3.0 부터 사용 가능하다. 내가 아직 플렉스랑 액션스크립트의 버전의 의미의 상관관계는 잘 모르겠지만, 플렉스 3 버전 기준에서는 <mx:script> 안에서 함수와 변수를 사용하게 된다. 나 같은 경우 플렉스 초창기 시절에는 액션 스크립트 자체를 모르고 접근하였는데, 왠지 액션스크립트 3.0이 자바+자바스크립트 랑 비스무리해서 코딩은 쉽게 될 수 있었지만 모듈화 자체를 모르다 보니 한 개의 MXML파일이 무려 1000줄에 달하는 일 까지 발생하게 되었다. 그저 그냥 <mx:script><![CDATA[]]></mx:script> 안에 다 넣다 보니 프로그램이 느린 것은 물론, 함수 하나 수정하려고 찾아 들어가면 이건 뭔 갑작스러운 삽질이 시작되고, 가독성 자체가 떨어졌다. 한 개만 바꾸면 되는 것을 실수해서 한번 잘못 바꾸게 되면 계속 삽질을 하게 되는 것이다.
AS 파일은 이러한 스크립트 코드의 모듈화와 사용자 정의 클래스를 사용할 수 있도록 한다. 앞에서 MXML 컴포넌트에 대해 말했는데, 액션 스크립트는 상속 개념을 통해 거의 대부분의 플렉스 개체를 상속받아 재 정의할 수 있다. MXML자체에서 지원되지 않는 것도 정의할 수 있다.
액션 스크립트 클래스는 하나의 클래스 객체를 제작하는 것인데, package를 통해 클래스를 묶고, 이를 객체로써 혹은 데이터 형으로써, 사용하는 것은 아주 일반적인 OOP적 프로그래밍의 형태이다. AS를 통한 사용자 정의 클래스를 모를 떄는 바보같지만, 내가 만드는 프로그램에서 사용되는 아주 일반적인 객체를 선언해서 사용할 줄도 몰랐다.


결국 이 MXML 컴포넌트와 Action Script파일을 통해 우리가 생각할 수 있는 것은 아주 보편적인 RIA의 설계 방식인데, 화면을 분할하고 이에 따라 표출할 데이터를 설계하고 레이아웃을 구상하게 되면 => 이에 따라 프로그램에서 공용으로 사용될 객체들은 무엇인지, 또 이것들이 사용자 정의 객체라면 어떤 메소드와 변수들을 묶고 다녀야 할 것인지, 어떤 화면에서 어떤 컴포넌트와 사용자 정의 클래스를 물고 갈 것인지를 설계해야 한다. 이렇게 back단 설계가 끝나면 프로그램에서 사용되는 외부 웹 서비스와 내부 서버단(DB 등) 설계를 통해 하나의 프로그램을 제작할 준비를 마치는 것이다.


웹의 RIA는 대부분이 view와 logic으로 이루어져 있다. 그리고 view도 여러 개가 사용되고 로직도 여러 객체가 사용되거나 사용되지 않는다. 따라서 이러한 웹 서비스의 특성을 올바르게 이해하고 설계할 수 있다면, 플렉스 뿐만 아니라 앞으로 등장하게 되는 다양한 RIA서비스들에 대해 보다 빠르게 이해하고 설계해 나갈 수 있을 것이다.



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 메튜장

트랙백 주소 http://izect.kr/trackback/606 관련글 쓰기

댓글을 달아 주세요



사용자 삽입 이미지

"어쩌지.. 나 oop의 매력에 빠져버렸어.."
라고 생각했던 오늘 아침이다.
uml설계나 rational rose니 design pattern이니, 살짝살짝 공부해 봤었는데 영.... 이해하기가 뭐이리 힘든거냐!!
사실 설계의 중요성은 자바 인트라넷을 작업하면서 깊게 느꼇던 것인데, 이부분에 종점을 찍어준 것은 "조엘온 소프트웨어"에서 기능명세서 부분을 보고 나서이다.
내 머리는 어케된건지 언제나 구조체+main함수였다. 콘솔 프로그래밍의 폐헤가 바로 이런 것인가.. 머리가 완전 구조화로 변해버린것이다!!

내가 맹근 클래스들은 protected따위는 없었다.(개념을 모르니깐..) virtual은 써본적도 없다. 상속? 할줄만 알지 정통으로 써본적은 없다. STL은 뭔말이냐?...
그저 뭐.. java는 죄다 클래스 개념이니깐 간단한 클래스만 짜집기 해서 맨날 맹근다는 것이 그게 그거였고, 내가 만든 소스코드는 모듈화가 전혀 되어있지 않았다. 설계도 엉망, 헤더와 소스의 독립화는 전혀 실행되지 않았고.. 클래스들은 완전 복잡하게 죄다 꼬여있고..

이런 개념을 잡아준게 바로 effective c++이라는 책이다. 4일째 새벽에 4시간식 투자해서 보고 있는데 솔직히 내가 모르는 개념들이 너무 많다. 아니 개념이라기보다는 그냥 문법이다. const? friend? explicit? 뭐냐 이게...
그래서 그나마 집에 있는 c++ prime(정말 두꺼움..) 옆에 두고 완전 초보 프로그래머 시절로 돌아가서 차근 차근 보고서 하나 하나씩 이해해 나가고 있다.

친구가 하나 하나 코딩하면서 이해해 보라는데, 우째, 주의해야 할 항목 55개가 있는데 한 5번까지만 코딩해보고 나서는 그냥 읽고 있다. 와... 완전 심오하게 빠져들어버렸다. 솔직히 개념적으로만 된 항목도 많고, 당최 어떻게 코딩을 해봐야 하는가!! 라는 것도 많아서 이다.
(대두 물론 나중에 코딩해 보겠삼;; 우선 쭉 읽으려고 .. ㅎㅎ)

객체지향의 신비.. 요즘은 세상이 너무 좋아져서 c#이나 자바는 메모리 누수는 크게 걱정 안해도 알아서 해준다.(물론 지금 내 지식 선에서는 이렇게 보고 있다.) 그런데 c++은 이런 세세한 항목까지도 신경써야 하고, 컴파일러 별로 생성자, 소멸자는 물론 new, delete, 포인터 등등.. 리턴할때 어떤걸 리턴하면 안된다니.. 등등을 아주 세심히 고려해야지 비로서 c++의 기능을 100% 써먹을 수 있고, 이게 습관으로 고정된다면 메모리 누수니 여러모로 신경써서 개발되온 c#이나 자바 등을 제대로 사용할 수 있는 것이라고 생각한다.

이제 항목 31번을 보고 있다. 스마트 포인터 등등.. 너무나도 새로운 것이 많다. 그마만큼 나는 미쳐들고 있다. 오늘도 새벽에 5시간동안 이 책과 샤프 하나만 들고 계속 보고 있었다. oop가 이렇게 신기한 것일줄이야.. 그야말로 사람의 두뇌 모듈을 만드는 것과 같은 착각을 불러 일으키고 있다.

객체지향 프로그래밍, 얼마나 완벽한 개념이었겠으면 c#이니 자바니 죄다 이개념으로 사용하고 있겠는가,
하물며 이 책에서는 설계부분에서도 고려하고 주의해야 할 점을 명확히 설계해 주고 있다. 특히 세계적인 c++권위자인 스콧 마이어가 쓴 책이라 더욱 더 신뢰가 간다.
설계 부분에서 특히나 기억에 남는 것은... "항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자."에서 깊은 인상을 받았다. c++에서는 이러한 형의 완벽함을 위해서 operator니, 생성/소멸자니.. 를 연구했겠는가.

책에 자세한 내용은 강컴을 참조하는 게 좋을 것 같다. 아직 뭐 나는 초짜에다가 절반밖에 보지 않았으니.. 크게 언급할 코멘트는 없다. 다만, 정독을 완료하고 나서는 한번쯤 내가 인상깊었던 것들을 정리해서 올릴 필요는 있을 것 같다.

Effective C++이 Effective think 로 변하는 그날까지!! 화팅!

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 메튜장

트랙백 주소 http://izect.kr/trackback/225 관련글 쓰기

댓글을 달아 주세요

이전버튼 1 이전버튼



블로그 이미지
html5,모바일웹,웹앱,자기브랜드,시간관리 등을 다룹니다.
메튜장

Yesterday198
Today86
Total478,681

달력

 « |  » 2012.02
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29