Category
- Objective-C를 보자. B가 ClassC를 확장하는데 Category를 사용했고 그 카테고리 이름을 CategoryB라고 지었다고 하자. 그리고 A는 ClassC를 확장하는데 CategoryA라고 이름을 지었다고 하자. 수평적 확장으므로 레이어가 ClassA에서 두개밖에 없을 뿐 아니라, B가 추가한 부분이 A가 확장한 ClassC 클래스엔 들어 있지 않다!
아.. 얼마나 좋은가? 멋지지 않은가?
-> Category를 쓰면 수평적 확장이 가능하단 얘기.
즉,
ClassA
I I
CategoryA CategoryB
- 카테고리 안에 정의된 method는 ClassC의 원래 method의 이름과 같은게 있을 수도 있다. 이때는 기존의 것을 override하는 것이 된다!
하지만 이때는 상속 받은 것과 달리 기존의 것을 새로운 것이 invocation을 할 수가 없다.
그냥 완전히 새걸로 바꾸는 것이다. 이것은 장점이기도 하고 경우에 따라 단점이기도 하다.
-> 같은 이름의 method로 override하면 완전히 대체하는 것이 된다...
- 같은 클래스에 대한 다른 카테고리에 있는 것을 override하는 것은 안된다.
->당연하겠지. 수평적 확장이니까.
- 기존의 클래스에 변수를 추가해야 할 경우엔?
-> 상속을 써야함... Category는 method만 추가 가능.
- Objective-C를 보자. B가 ClassC를 확장하는데 Category를 사용했고 그 카테고리 이름을 CategoryB라고 지었다고 하자. 그리고 A는 ClassC를 확장하는데 CategoryA라고 이름을 지었다고 하자. 수평적 확장으므로 레이어가 ClassA에서 두개밖에 없을 뿐 아니라, B가 추가한 부분이 A가 확장한 ClassC 클래스엔 들어 있지 않다!
아.. 얼마나 좋은가? 멋지지 않은가?
-> Category를 쓰면 수평적 확장이 가능하단 얘기.
즉,
ClassA
I I
CategoryA CategoryB
- 카테고리 안에 정의된 method는 ClassC의 원래 method의 이름과 같은게 있을 수도 있다. 이때는 기존의 것을 override하는 것이 된다!
하지만 이때는 상속 받은 것과 달리 기존의 것을 새로운 것이 invocation을 할 수가 없다.
그냥 완전히 새걸로 바꾸는 것이다. 이것은 장점이기도 하고 경우에 따라 단점이기도 하다.
-> 같은 이름의 method로 override하면 완전히 대체하는 것이 된다...
- 같은 클래스에 대한 다른 카테고리에 있는 것을 override하는 것은 안된다.
->당연하겠지. 수평적 확장이니까.
- 기존의 클래스에 변수를 추가해야 할 경우엔?
-> 상속을 써야함... Category는 method만 추가 가능.
'프로그래밍 > iPhone Dev' 카테고리의 다른 글
[Objective C] Protocol (0) | 2009.11.20 |
---|---|
[Objective C] Root Class (0) | 2009.11.20 |
[Objective C] 15 NSDictionary (0) | 2009.11.13 |
[Objective C] 14 NSArray (0) | 2009.11.13 |
[Objective C] 13 Autorelease Pool (1) | 2009.11.13 |