2011. 4. 15. 17:31

기능 확장

 객체 지향 설계는 한번 만들어진 시스템 (클래스) 다시 사용할 있어야 한다고 생각합니다.  Objective-C에서 제대로 설계된 클래스는 간단하게 기능을 확장할 있는 것입니다. 자신이 만든 클래스나 다른 사람이 만든 클래스에 관계없이 사용할 있습니다.

 우리는 지금까지 루트 클래스인 Object 클래스를 상속하여 왔습니다만, 우리가 직접 만든 클래스를 다른 클래스에 상속시킬 있는 것입니다.  클래스를 상속하는 경우 새로 생성되는 클래스를 서브 클래스라고 부르며, 상속한 클래스를 수퍼 클래스라고 합니다.

 서브 클래스는 슈퍼 클래스의 기능을 그대로 유지하기 위해 슈퍼 클래스에 정의된 메서드를 사용할 있습니다.  또한 서브클래스는 필요한 기능을 추가 수도 있습니다.

 #import <stdio.h>

 #import <objc/Object.h>

 

 @interface SuperClass : Object

 - (void) methodA;

 @end

 

 @interface SubClass : SuperClass

 - (void) methodB;

 @end

 

 @implementation SuperClass

-   (void) methodA

  {

   printf ( "SuperClass.methodA \ n");

  }

 @end

 

 @implementation SubClass

-   (void) methodB

  {

   printf ( "SubClass.methodB \ n");

   }

 @end

 

 int main()

  {

    id obj = SubClass alloc];

    [obj methodA];

    [obj methodB];

 

    return 0;

  }

  프로그램에서 정의된 SubClass 클래스는 SuperClass 클래스를 상속합니다.  , SubClass SuperClass 서브 클래스이며, SuperClass SubClass 슈퍼 클래스다 라고 표현할 있습니다.  SubClass SuperClass 기능을 상속하고 있기 때문에, SubClass 인스턴스가 SuperClass 기능을 그대로 이용할 있습니다.

  프로그램은 SuperClass에서 methodA 메서드를 SubClass에서 methodB 선언하고 있습니다.  SubClass methodB 이용할 있는 것은 물론이고, main() 메소드의 코드에서도 살펴 있듯이, SubClass 인스턴스는 슈퍼 클래스에서 선언된 methodA 호출할 있는 것입니다.

 클래스의 인스턴스를 만드는 alloc 메소드는 선언하지 않고도 호출할 있었던 것은, Object 루트 클래스를 상속하고 있었기 때문에 사용할 있었습니다.  사실 Object 루트 클래스를 상속해야만  alloc 메소드를 사용할 있는 것입니다.

Posted by openserver