삽질의 현장/- .NET

#096_닷넷(.NET)_ WinForm - WinForm Intro

shovelman 2015. 11. 21. 11:21


안녕하세요 삽잡이입니다.


이번시간부터는 WinForm에 대해서 

간략하게(?) 맛만 보며 알아가려고 합니다.


왜 맛만 보냐?? 요즘 대세는 WPF죠... 허허...


...  


힘빠지십니까... 그래도 알아서 나쁠게 있습니까?

달려봅시다!!!

WinForm에 대한 썰은 나중에 [ETC]로 하나 풀어보도록 하지요.


아무튼... 달려봅시다!!!


WinForm을 사용하기 위한 기본 클래스 라이브러인 

System.Windows.Forms 는 BCL에 들어있습니다.



Application.Run()는 정적 메서드입니다.

해당 메서드 내부에는 실제 프로그램을 구동시켜주도록

쓰레드를 실행시켜 WinForm에 모든 동작을 수행하는 코드가 들어가있습니다.

여기에 Form 객체를 하나 넘기게 되지요.


[STAThread] 는

Single Thread Apartment의 약자로써,

Main에서 속성으로 무조건 포함이 되야합니다.


COM Component를 위해서인데,

COM Component에는 하나의 쓰레드 혹은 여러개의 쓰레드를 동작하겠는지...

즉, STA, MTA 방식으로 동작합니다.

그런데, WinForm의 Main은 STA 방식으로 동작하겠다고 정해놓은 것입니다.


모든 프로그램은 내부적으로 다른 기술들을 가져올 수 있습니다.

그런데, Main 함수만은 하나의 쓰레드로 동작시키겠다는 것을 명시하는 것입니다.



Form1에 들어가보면 Form을 상속받는데

결국 쭉 들어가보면 부모는 object 형식입니다.


이 Form1은 control들을 상속받는 사용자 클래스를 만들어 낸 것입니다.


Form은 Visual Studio에서 두가지의 형식으로 볼 수 있습니다.

Form의 코드를 GUI 방식으로 볼 수 있는 '디자이너' 형식과,

프로그래머의 영역인 '코드 View' 형식이 있습니다.


따라서, 똑같은 cs파일이 두가지가 있는 것입니다.


잘보시면 partial 키워드가 들어가있죠.

즉, 똑같은 클래스지만 

디자이너의 영역과 코드영역으로 나누어 구현을 할 수 있다는 것입니다.


참고로, 지금부터는 'designer.cs' 에 있는 코드는 '디자이너 코드',

그리고 우리 프로그래머가 다루는 코드는 그냥 '코드'라고 칭하겠습니다.

   



주의하셔야 할 점은,

디자이너 코드는 수정해서는 안됩니다.

왜냐, 디자이너를 위해 만들어놓은 파일이기 떄문입니다.

코드 View에서 건들던, Form 디자인 형식에서 이쁘게 꾸미던지

어차피 건드리지 않아도 자동으로 디자인 코드는 알아서 수정이 됩니다.


물론 코드양이 적다면 

디자인 코드를 건드렸다가 오류가 나도 찾을 수 있겠지만, 

양이 좀 커진다면

코드는 남아있는데 이미지는 없고... 난리 납니다...

그냥 건드리지 마십쇼... 허허...



우선적으로 생성자에 의해서 Form 객체가 만들어질때,

InitializeComponent() 메서드를 호출하게 됩니다.



이는 디자이너가 만든 코드를 실행 곧, 초기화하는 과정을 나타냅니다.

우선적으로 이 작업을 하고 객체가 만들어지는 것입니다.



Form1이라는 이름은 생성시 자동으로 만들어지는데,

[속성]에서 'Text' 속성을 변경해주면 됩니다.


디자이너나 코드나 모두 동일한 클래스인데 나눠져있지 않습니까?
따라서, 소통을 하기 위한 '어떤 것'이 필요합니다.

디자이너 창에서는 이를 '이름'이라고 부릅니다.


디자인은 프로그래머가 아닌 그래픽 디자이너들이 만듭니다.

따라서, 프로그래머가 그에 대한 행동인 코드를 만드는 분업을 하지요.


기존 API에서는 리소스를 만들고 정수 값인 'ID'를 통해 가지고 놀았었는데,

이제는 '이름'을 가지고 논다 이겁니다.


프로그래머 입장에서는 이름은 '참조자'입니다.

즉, 객체의 참조입니다.



[속성]의 "Name"을 Form1에서 바꾸고 싶은데로 바꿔보시면,

이제 이름도 바뀌는 것을 확인할 수 있습니다.



디자이너에 참조자와 이름을 모두 바꾼것입니다.



Form은 또 다른 컨트롤을 담을 수 있는 컨테이너입니다.

따라서, 객체를 만들고 초기화 하고 컨트롤을 추가할 수 있지요.


디자이너 코드에서 하는 행동은 코드에상에 모두 추가가됩니다.

이는 컴파일러가 알아서 해주는 것이지요.


코드에서 행동을 구현해주면 됩니다.

디자인코드는 행동을 만들어내지 못하지요.

단지, 설정값을 통해서 Look & Fell 즉, 최초에 상태값을 만들어내는 것입니다.


물론, 디자이너 코드도 실제 프로그래머가 100% 다 구현할 수 있습니다.

힘들뿐이지요...

보면서 만드는게 훨씬 빠르고 편하지 않겠습니까?


그래서 디자이너 영역과 프로그래머 영역을 분류하여 만들게됩니다.

결론적으로는 동일한 코드이지만 말입니다.



이번 시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!