반응형
상속 : 새 클래스를 생성할 때 이미 존재하는 다른 클래스와 차이점만 새로 정의. 부모의 특성을 상속받음.
컴포지션 : 객체가 다른 객체에 대한 참조를 갖는 것.

상속문법
@interface Shape : NSObject
Shape는 NSObject를 상속받음. 
자식클래스 : 부모클래스 이러한 방식으로 정의
NSObject : COCOA에서 사용하는 클래스. 

@interface Shape : NSObject
{
ShapeColor fillColor; // enum 혹은 struct로 정의
Shape bounds; // enum 혹은 struct로 정의
}
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end
@interface Circle:Shape
@end
@interface Rectangle:Shape
@end

@implement Shape
- (void) setFillColor: (ShapeColor) c
{
fillColor = c;
}
- (void) setBounds: (ShapeRect) b
{
bounds = b;
}
- (void) draw {} 
// 메소드의 몸체가 비어 있거나 의미 없는 값을 사용해도 괜찮다. 자식 클래스에서 재정의 가능하므로.
@end

리팩토링 : 어떤 다른 내용을 추가하고 나서 중복된 내용을 제거하는 것.

용어
superclass(슈퍼클래스) : 상속을 주는 클래스. superclass(슈퍼클래스) = 부모 클래스.
subclass(서브클래스) : 상속을 받는 클래스. subclass(서브클래스) = 자식 클래스.
override(오버라이드) : 상속받은 메소드를 바꾸고 싶을 때 구현에서 변경하는 것.
예시)
@implement Rectangle
- (void) draw // 위의 draw 메소드 오버라이드
{
NSLog(@"drawing rect at (%d %d %d %d) in %@", bounds.x bounds.y, bounds.width, bounds, height, colorName(fillColor));
}
@end

method dispatching(메소드 디스패칭)
method dispatcher(메소드 디스패처)가 현재 클래스에서 메소드를 찾는다. dispatcher(디스패처)가 메세지를 받은 객체의 클래스에서 메소드를 찾기 못하면 그 객체의 슈퍼 클래스를 찾는다. 상속으로 연결된 모든 클래스 사이에서 이 과정이 반복된다. 최상위 슈퍼클래스에도 그 메소드가 없다면 런타임 에러를 발생한다.

서브클래스는 슈퍼클래스이다. (is a 관계, Subclass is a superclass.)
다형성(polymorphism) : 객체에 특화된 종류를 사용하는 기능.
모든 - 메소드는 사용할 인스턴스 변수(필드)를 찾기 위해 self 파라미터를 사용한다. (=this)

추상클래스, 제네릭(Generic) : 아무 기능을 하지 않는 메소드를 가진 클래스.
super : 슈퍼클래스에게 메세지를 보내라는 뜻. 자바의 super와 비슷함.

반응형

'Objective C' 카테고리의 다른 글

3장 객체지향 프로그래밍의 소개  (0) 2010.06.07
2장 C의 확장  (3) 2010.06.07

+ Recent posts