'hierarchy'에 해당되는 글 1건

  1. 2010.04.11 객체지향을 강력하게 만드는 상속
Objective C/상속2010. 4. 11. 21:44
C 이후의 대부분의 언어는 객체지향이라는 개념으로 언어가 설계되었다. 
이는 절차 지향보다 훨씬 편하고 다형성을 지킬 수 있도록 많은 프로그래머들이 고민하여 현재까지 발전해 왔다.
당연히 ObjC도 객체지향언어이며 모든 것은 루트클래스(최상위 클래스)에서 시작한다.
여기서는 NSObject클래스가 루트클래스이다. 루트클래스는 더 이상 위로 올라갈 수 없는 가장 기본적인 클래스(최상위 클래스)를 말하며 그것을 상속받은 클래스를 자식클래스 또는 서브 클래스라고 한다. 
서브클래스에서 루트클래스 또는 부모클래스, 슈퍼 클래스로 접근하기 위해서는 항상 super라는 키워드를 사용한다.

상속 받은 서브 클래스는 항상 부모클래스의 모든 기능을 가지고 있고 추후 개발자에 의해 새로운 기능들이 추가되거나 수정(Override)된다. 가령 어떤 클래스 A는 변수 x와 이를 설정하는 initVar라는 메서드를 가지고 있다. 누군가 이 클래스를 이용하여 변수x를 설정하고 그 값을 출력 하는 기능을 추가하고 싶다고 한다면 클래스 B를 만들어 클래스 A를 상속받아 새로운 메서드인 print를 만들어 넣으면 된다.

이렇게 상속을 하다보면 많은 메서드와 변수가 쓰이게 된다.
컴파일러는 어떤 변수와 메서드를 우선으로 실행할까? 아래는 메서드 실행 메카니즘이다.
어떠한 메시지가 인스턴스에 전달되면 컴파일러는 해당 인스턴스 클래스 내부를 우선으로 검색하고 실행한다. 
만약 해당 클래스에 메시지를 받는 메서드가 없다면 그 상위 클래스에서 메서드를 검색한다. 그래도 없다면 또 그 상위 클래스를 검색하고 발견되면 실행하지만 발견되지 않는다면, '메시지 전달에 응답하지 못할 것'(may not respond to 'method')이라고 컴파일러는 경고 또는 에러를 발생한다.
Posted by 버터백통