본문 바로가기

Mac

cocoa 의 MVC

 최근 cocoa 공부를 하고있는데 다른 언어와는 다른 특이한것이 많이 있다.
그중에 책에서는 깊게 설명이 안되어 있는 것이 cocoa MVC모델의 구현이다.

 사실 프로그래밍을 짜본 해본사람은 누구나 알만한 개념이 MVC이기 때문에
자세한 설명은 생략하고 이것을 코코아에서는 자신만의 방식으로 구현하고 있다.

cocoa의 MVC를 이해하기 위해서는 아래의 사항들을 알아두어야 한다.
기술구현의 순서대로 설명을 하면,

1. NSObject
objective-c에서 cocoa framework는 언어의 일부분이라 부를수 있을 정도로 중요하다.
예로서  NSObject를 들수가 있는데 cocoa를 사용하는 모든 class는 NSObject class를 상속받는다.
이 class는 프로그래밍을 하는데 있어 편의를 돕는 많은 기본 기능을 포함하고있다.

이 class가 중요한 이유는 대부분의 객체가 상속하고 있기 때문에 언어의 일부분으로
이해해야 한다는 것이다.

2. Dynamic binding
objective-c는 dynamic binding을 지원하는 언어다.
예를들면
id rtn = [obj message];
에서 rtn값은 실행시간이 되서야 알수가 있다.

3. Selector
dynamic binding으로 가능한 objective-c의 여러가지 기술 중 selector형 변수가 있다.

아래와 같은 용법으로
SEL method = @selector(methodName)
method 이름을 변수로 지정하여 원하는 객체에  전달할수가 있다.

예를들면
[target description];
[target performSelector:@selector(description)];
위의 두 명령행은 같은 의미이다.

꽤나 단순해 보이는 이 기능은 나중에 delegate패턴을 구현하는데 있어 엄청난 장점을 가져온다.

*내부적으로는 모든 methodName은 SEL형으로 불변객체로서 저장된다. 이것은 즉 같은이름의
함수는 같은곳을 가르킨다는 이야기.

4. target - action paradigm
selector가 있기에 가능한 기술이다.
간단히 설명을 하면 일종의  delegate패턴이다.

예를들면
[button setTarget:obj];
[button setAction:@selector(showpanel:)];
위 처럼 실행시키고 싶은 메소드를 대상 object와 함께 지정하여 실행을 위임할수가 있다.


5. KVC(key-value coding) , KVO(key-value observing)
이 기술이 가장 재미있는 기술이다.
KVC - VO(value object)의 property의 이름만으로 값을 읽고 쓸수가 있다.
이건 앞서 말한 selector 변수가 존재하기에 가능한 기술로서 setName , name(getName)
메소드를 생성하여 프로퍼티에 접근할수가 있다.
물론 이것 이외에도 many relationship 변수 추적이라든지 KVC준거등이 존재한다.

예를들면
valueForKey - 키로 값을 구함
setValue forKey - 키로서 값을 설정
valueForKeyPath - 값이 존재하는 경로를 지정 접근 department.member.name 같은형식

KVO -Object를 등록하여 자신이 가지고 있는 property가 변경이 생길 경우 보고할수가 있다. 
일종의 observer패턴을 구현해놓았다고 생각하면 쉽다.
*이 기능또한 NSObject단위에서 제공하는기술

6.Cocoa Binding
KVC,KVO를 이용해 view와 controller를 연결하는것을 의미한다.
너무 길기에 자세한 설명은 생략.

7.Core data
Cocoa binding 및 KVC,KVO를 이용해 Model에 해당하는 데이타들의 변화를 관리할수가 있다.

8. Object graph
GUI툴을 이용해 data model을 그리고 코드를 생성한다.
그리고 objective-c 에서 지원하는 category를 이용해 기존코드와 통합할수도 있다.(아마도?)

잠깐 설명하려했는데 생각보다 길어지게되었다.

정리하자면 Model , Controller , View를 cocoa binding 및 core data를 이용하여 MVC 구현한다.
그리고 이 모든 통합의 밑바탕에는 위에서 열거한 언어의 특성에서 나오는 모든 기술들이 이용된다.

p.s 많은 태클 바람. 업데이트 예정.