View와 View Controller의 관계

제가 지금보다 더 초보였을때 "도대체 View Controller를 왜 쓰는거지?" 라는 생각을 하였습니다.
오늘은 저와 같은 newbie들을 위해 그에 대한 답('정답'은 아닙니다ㅎㅎ)을 생각해보고자 포스팅 하게 되었습니다.


UIViewController를 사용하지 않고도 얼마든지 응용 프로그램을 작성할 수 있습니다.
그렇다면 왜 UIViewController를 사용하는 것일까요?

UIViewController는 View의 Container역할을 합니다.
이 Container안에서, View들의 계층 구조등을 작성할 수 있습니다.

말이 애매한데, 조금 달리 말해보겠습니다.
UIViewController를 사용하지 않고 계층적으로 View를 생성하기 위해서는 다음과 같은 방법이 있습니다.

1. delegate에서 view들 추가
2. view를 subclassing하여 view안에 view추가

물론 이것 말고도 기상천외한 방법들이 있을 것이라 예상되지만, (제가)자주 사용하는 방법은 위와 같습니다.

여기서 1번인 delegate에서 view들을 추가하는 방법을 보겠습니다. applicationDidFinishLaunching: 메서드에서 main view들을 만들고 계층적으로 구성할 수 있습니다. 1번 view에 addSubView: 하고, 이 뷰에 다시 addSubView: 하는 방법으로 말이죠.

2번의 경우 subclassing하여 initWithFrame:과 같은 메서드 안에서 계층적으로 구성할 수 있습니다.

이렇게 할 경우 문제가 있냐? 하면... 일반적인 경우에 없다고 생각할 수 있습니다. 그렇다면! 어떤 경우에UIViewController를 사용하게 되는지 살펴보겠습니다.

UIViewController를 하나 생성한 뒤 loadView 메서드에서 view"들"의 계층 구조를 설정합니다.
즉, view가 계층적으로 생성되고 (iPhone이)회전되고 메모리가 부족할 경우 현재 사용되고 있는 view들을 release하는 등을 역할 등을 UIViewController에서 전담하게 되는 것입니다. 이 방법을 이용하게 되면 1번이나 2번에 비교하면 좀 더 구조화 할 수 있다는 장점이 있습니다.

기존에 MFC에서는 CDialog들을 사용하려면 "거의" 필수적으로 subclassing을 하고 OnInitDialog(WM_INITDIALOG)에서 계층 구조를 만들고, 하위 CDialog또한 subclassing 하고... 이렇게 처리해야 했는데 이제는 그럴 필요가 없다 이거죠.
(쭉 사용해봤는데 대부분의 기능이 delegate로 분리되어 UIView를 subclassing할 일이 별로 없었습니다)


경험 미숙이라 잘못된 내용이 있을지도 모르지만, "UIViewController 도대체 왜 쓰지?"라는 물음에 약간이라도 도움이 되었으면 합니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2009/04/02 11:20 2009/04/02 11:20
,
Response
No Trackback , No Comment
RSS :
http://b4you.net/blog/rss/response/214


블로그 이미지

빗소리를 먹는 사람.

- 장현준

Notices

Archives

Authors

  1. 장현준

Recent Trackbacks

  1. 듀얼클러치의 생각 rsvin28's me2DAY 2009

Calendar

«   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      

Site Stats

Total hits:
158010
Today:
80
Yesterday:
228