카테고리에 대한 전반적 설명 : http://soooprmx.com/wp/archives/2436
카테고리는 한 클래스를 확장할때 자식 클래스를 생성하지않고도 확장할수있는 방법이다.
다음과 같이 Fraction 클래스가 있을 때 add, mul, sub, div 메소드를 더 추가하고 싶다면 다음과 같이 하면된다.
아래 예제를 보면 앞쪽에 Fraction 클래스를 명시하고 (카테고리명)을 추가시켜주면 된다.
#import <Foundation/Foundation.h>
#import "Fraction.h"
@interface Fraction (MathOps)
-(Fraction *)add:(Fraction *)f;
-(Fraction *)mul:(Fraction *)f;
-(Fraction *)sub:(Fraction *)f;
-(Fraction *)div:(Fraction *)f;
@end
@implementation Fraction (MathOps)
-(Fraction *)add:(Fraction *)f{
Fraction *result = [[Fraction alloc]init];
result.numerator = (self.numerator * f.denominator) + (self.denominator * f.numerator);
result.denominator = self.denominator * f.denominator;
[result reduce];
return result;
}
-(Fraction *)sub:(Fraction *)f{
Fraction *result = [[Fraction alloc]init];
result.numerator = (self.numerator * f.denominator) - (self.denominator * f.numerator);
result.denominator = self.denominator * f.denominator;
[result reduce];
return result;
}
-(Fraction *)mul:(Fraction *)f{
Fraction *result = [[Fraction alloc] init];
result.numerator = self.numerator * f.numerator;
result.denominator = self.denominator * f.denominator;
[result reduce];
return result;
}
-(Fraction *)div:(Fraction *)f{
Fraction *result = [[Fraction alloc] init];
result.numerator = self.numerator * f.denominator;
result.denominator = self.denominator * f.numerator;
[result reduce];
return result;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction *a = [[Fraction alloc] init];
Fraction *b = [[Fraction alloc] init];
Fraction *result;
[a setTo: 1 over: 3];
[b setTo: 2 over: 5];
[a print];
NSLog(@" +");
[b print];
NSLog(@"-----");
result = [a add:b];
[result print];
NSLog(@"\n");
[a print];
NSLog(@" -");
[b print];
NSLog(@"-----");
result = [a sub:b];
[result print];
NSLog(@"\n");
[a print];
NSLog(@" *");
[b print];
NSLog(@"-----");
result = [a mul:b];
[result print];
NSLog(@"\n");
[a print];
NSLog(@" /");
[b print];
NSLog(@"-----");
result = [a div:b];
[result print];
NSLog(@"\n");
}
return 0;
}
'프로그래밍 > Objective C' 카테고리의 다른 글
Objective C - enum 사용 법 (0) | 2015.09.19 |
---|---|
Objective C - 동적바인딩과 id형 (0) | 2015.09.19 |
Objective C - 메소드 재정의하기 (0) | 2015.09.17 |
Objective C - @class 지시어 사용하기 (0) | 2015.09.15 |
Objective C - 상속으로 확장하기 (새 메소드 추가) (0) | 2015.09.14 |
Objective C - 간단한 예제를 이용한 상속이해 (0) | 2015.09.11 |
Objective C - 세터(setter)와 게터(getter) 자동 생성 및 클래스를 인자로 넘기기 (0) | 2015.09.06 |
Objective C - 인터페이스와 구현파일 나누기 (0) | 2015.09.06 |