꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by zinzza

안녕하세요 zinzza, 연두父, 이경배입니다.

오랫만에 글을 적어봅니다.

글을 적는 시점에서 제 계획은 C#으로 게임에 응용될 간단한 툴을 제작해보려고 합니다.


이 글의 대상은 엄청 간단한 C#책을 살짝쿵 읽어본 기획자, 대학, 학원등에서 C#프로그램을 좀 배운 수준의 사람들을 대상으로 적었습니다.


일단... 프로그래머 분들께서는 이 글의 오류를 찾아 저에게 제출해주시고, 그럴 목적이 아니시라면 읽지 말고 나가주세요.(부끄로아요ㅜㅜ)


그 시작은...



시작.


그리고 강의에서 만들려고 하는 툴은 이러하지요.


학습목표.


목표는 이러합니다.


이걸... WPF와 XML과 C#을 이용해서 만들려고 합니다. MVVM패턴으로요^^;
천~천~히(달땡님 미추어버리게)

MVVM이란?
뭐든지 정의를 찾아야 할때는 만든놈들한테 물어봐야 합니다.
http://msdn.microsoft.com/ko-kr/magazine/dd419663.aspx#id0090006
Microsoft에 나와있는 MVVM에 대한 정의.


주의!
위 내용을 읽으려고 시도하던 중 뭔 소린지 모르겠다 할때는 일단 읽는 것을 중단하고 아래로 진행해야 합니다.  저걸 이해하겠다고 사전찾고 MVC, MVP 등... 모르는 것들의 정의를 찾아 여행여행 하다보면... 똑똑해집니다-o-;
하지만 저는 위의 내용들을 이해하려고 하다가 포기하게 되더군요. 





그레서 전 포기하는것보다 “모르고 마구자비로 하다보니 알게되었다” 의 테크를 추천합니다. 사실... 저도 잘 모르는게 많고요 ㅜㅜ

내가 생각하는 MVVM
그레도 아예 모르고 넘어가는 것 보다는 조금이라도 알 수 있게... 제가 이해하고 있는걸 풀어보겠습니다. 이것까지 모르겠으면 또 넘어가 봅시다.

MVVM은 프로그램을 개발할때 Model 과 View와 ViewModel을 나눠서 개발하자는 뜻입니다.
그림으로 볼까요?


출처:
http://openlightgroup.net/Blog/tabid/58/EntryId/84/Silverlight-MVVM-The-Revolution-Has-Begun.aspx

오~~ 설명이 잘 되어있는 이미지군요.
(이미지 안에 있는 UI, Collections,...Web Services등은 무시하세요. 나중에 나중에^^)

해석이 다를 수 있지만 제가 생각하는 단어로 매칭을 좀 해보면
Model은 데이타, 자료 등으로 해석할 수 있을거 같습니다.
View는 UI정도로 해석해볼까요?
ViewModel은... 글쎄요-_-??? 그냥 뷰모델이죠 뭐.(데이타를 제어하는 로직, 화면에서 내려지는 명령 처리등이 들어갑니다)



저도 잘 모른다니깐요ㅜㅜ


반복하는 거지만 MVVM은 위 그림처럼 프로그램에서 UI와 데이터, 로직을 분리하겠다는 뜻입니다.

그나저나 왜 나누냐구요-_-?
이유는 이런 상황에 대처하기 위해서 입니다.
일반적인? Winform에서는 뷰를 제어하는 코드가 직접 들어가죠.
예를들어 텍스트박스에 글자를 넣기 위해서는...
form1.txtName = “연두부”;
이런 코드 말이죠.
만약에 위 코드에서 텍스트박스를 label로 바꾼다면요? 그 label을 또 다시 TextBox으로 바꾼다면?
뷰는 당연히 바꾸는거고,  모든 소스코드를 뒤져가며 txtName을 lblName으로 또 txtblockName등으로 바꿔줘야 합니다.(뒤에 간단한 실습으로 한번 보여드리겠습니다.)
물론 Ctrl + H는 저도 잘 알고있습니다만... 어느정도 규모가 되는 프로그램이라면 그것도 보통 일은 아니죠-_-;
이런 문제를 해결하는 방법으로 MVC라는 패턴이 생겨났고, MVC의 파생된 형태라고 생각하면 됩니다.
그럼 어떻게 나누냐구요-_-?
그건 좀 있다가^^;

뭐 그림으로도 설명은 잘 안되는군요-_-;
일단 막 진행해 볼까요?
하다보면 되겠죠 뭐~ 안되서 질문이 올라오면 업데이트도 좀 하고... ㅎ

왜 MVVM인가?
여러가지 장점이 있지만 가장 큰 이유는...
개발자가 WPF와 MVVM에 익숙해진 뒤에는 이 둘을 차별화하기가 어려워집니다.(msdn)
때문입니다.
제가 회사에서 거의 대부분의 프로젝트를 MVVM패턴을 이용하거든요.
실제로 MVVM에 익숙해진 다음 WinForm프로그래밍을 하면 짜증이 밀려오는 재미있는 경험을 하게됩니다.





그럼 직접 그 짜증을 경험해봅시다.
C#으로 간단하게 화면에 숫자를 표시하고 “+”버튼을 누를때마다 숫자가 증가하고, “-”버튼을 누를때마다 숫자가 감소하는 프로그램을 만들어봅시다.

일반적인 윈폼으로 말이죠^^;



먼저 폼을 디자인합니다. label 하나와 button 2개로 구성합니다.
이부분은 자세히 설명하지 않겠습니다.
그리고, 버튼의 크기다 다르고 디자인이 구린건 님들 모니터가 불량인겁니다.
자 그럼 + 버튼과 -버튼을 더블클릭해서 소스를 입력합시다.




1. 숫자변수 TestNumber를 선언했습니다.
2. + 버튼의 코드입니다.
3. -버튼의 코드입니다.

자... 이젠 문제점을 파악해야 하니 이 프로그램의 label을 textbox로 변경해보겠습니다.



자... 이렇게 label을 지우고 textbox를 올려놨습니다.




오호라... 역시나 에러가뜨는군요.
위의 label1을 textbox1이라고 바꿔주면 일단 정상적으로 돌아갑니다^^;

이왕 하는거 좀 더 가보죠.
최대값은 10, 최소값은 0으로 지정해서 0이 되면 -버튼을 눌러도 숫자가 변하지 않게 해보는겁니다.
+버튼도 마찬가지로 10 이상 증가하지 않게^^;




오~~~ 점점 코드가 늘어가는군요. 복잡해요.

하나만 더 해봅시다.
이번엔 0일때 -버튼이 비활성화, 10일때 +버튼이 비활성화 되는겁니다.

사실 0일때 -버튼을 누를 일이 없으니까요.^^;




자 저는 CheckButtonEnable() 이라는 함수를 하나 만들어서 두 버튼 이벤트에 추가해줬습니다.

ㅎㅎㅎ 이제 One more thing!
프로그램을 요모냥으로 짰더니 누군가 와서 이렇게 말합니다.
“야 인간아~ button1이 뭐냐? 당장 txtNumber, btnPlus, btnMinus로 바꿔!” 라고 말이죠.




정신차리고 뭘 해야 할지... 생각 좀 해봅시다. 뭘 해야하지-_-?

1. 일단 뷰에 가서 컨트롤들의 이름을 변경합니다.
2. 이벤트 이름이 바뀝니다. 그럼 각 버튼 이벤트에 있는 코드를 복사해서 새로 생긴 btnPlus_Click , btnMinus_Click 이벤트쪽으로복사합니다.
3. 코드에서 textbox1 로 되어있는 코드들을 전부 txtNumber로 변경합니다.
4. 코드에서 button1로 되어있는 코드들을 전부 btnPlus로 변경합니다.
5. 코드에서 button2로 되어있는 코드들을 전부 btnMinus로 변경합니다.


안해-o-!



이 연두 코딱지만한 프로그램에서 할일이 이따위로 많은데 실제로 회사에서 하는 프로젝트면... 에효...


그리하야!

이런 문제를 해결하고자 MVVM을 사용합니다!!! 

다음번엔 똑같은 짓을 MVVM패턴으로 해봅니다. ㅎㅎㅎㅎ


그럼 다음시간까지~ 안녕~~~



TAG , , , ,

댓글을 달아 주세요

  1. Favicon of https://gamedevforever.com 월하 2012.12.03 14:06 신고  댓글주소  수정/삭제  댓글쓰기

    아니... 왜 투비 컨티뉴 이미지를 클릭 했는데 다음 장이 안나오는거죠?!!!

    현기증 난단 말에요! 빨리 올려 주세요~

  2. 무언가 2012.12.03 15:37  댓글주소  수정/삭제  댓글쓰기

    개발자지만.. 잘 이해가 안되는 부분입니다. 중요한 부분인건 확실한데. ㅠ_ㅠ.
    투비컨 기다립니다.

  3. Favicon of https://gamedevforever.com 친절한티스 2012.12.03 16:05 신고  댓글주소  수정/삭제  댓글쓰기

    경배님을 경배하라~

    기대 되는 강좌입니다.

  4. Ged 2012.12.03 23:22  댓글주소  수정/삭제  댓글쓰기

    그냥 귀찮으니 데이터 오브젝트 하나 만들어서 모두다 바인딩.. 해피한 ...

    • Favicon of https://gamedevforever.com zinzza 2012.12.10 14:49 신고  댓글주소  수정/삭제

      그러면 저도 해피...
      하겠지만 그정도를 아신다면 이 글을 읽으실 필요가 없을거 같습니다.
      아니면 읽으신 후에 잘못된 점을 제가 우주의 먼지가 될때까지 까주세요~ ㅎㅎㅎ

  5. Favicon of https://gamedevforever.com 죠쉬 2012.12.07 11:10 신고  댓글주소  수정/삭제  댓글쓰기

    오호~ 진짜님! 진짜 체고!
    기대기대~~~
    @_@

  6. 2013.10.30 09:41  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다