프로그래밍/Objective C

Objective C - 카테고리의 이해

가카리 2015. 10. 9. 20:51
반응형

카테고리에 대한 전반적 설명 : 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;

}

 

반응형