2013년 4월 24일 수요일

Designated initializer


Designated initializer는 Objective C 를 공부하다가 나오는 개념인데, 처음엔 아예 새로운 문법이나 기능인 줄 알고 조금 헷갈렸다가, 애플 개발자 문서를 찬찬히 읽어 보니 상속이라는 특성 덕에 등장한 개념일 뿐이었다.


그 뜻을 간략히 말하자면, 한 클래스가 여러 개의 initialize method를 가지고 있을 때, 무조건 실행되어야 하는 지정된 initializer 이다. 만일 목적에 따라 initializer가 여러 개 필요하면, 하나의 initializer 메소드가 해당 클래스의 변수를 전부 초기화할 수 있도록 구현한 후, 다른 initializer들은 이 initializer를 사용해서 구현하면 된다. 이 때 해당 클래스의 변수를 완전히 초기화할 수 있는 그 하나의 initializer를 부르는 이름이 바로 designated initializer이다. 뭐 이를 위한 문법이나 코드가 따로 있고 그런 게 아니다.


Designated initializer 에는 중요한 특징이 하나 있는데, 바로 super 클래스의 init을 호출하는 코드가 반드시 포함되어 있어야 한다는 것이다. 그도 그럴 것이, 어느 클래스 B가 클래스 A를 상속하고 있다고 하면, 클래스 B를 초기화하려면 클래스 B 안에서 선언된 변수 뿐 아니라 클래스 A에서 선언된 변수들도 초기화해줘야 하기 때문이다.



-(id)init
    {
         if (self = [super init])
         { // Initialization code here }
         return self;
     }


이런 코드가 반드시 들어있어야 한다는 말이다.












요렇게 차례차례 상위 클래스의 designated initializer를 호출하여 모든 변수를 초기화하게 된다. (출처 : developer.apple.com )



참고 : http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html






댓글 없음:

댓글 쓰기