Categories
Fraction.h
Fraction.m
FractionMath.h
FractionMath.m
main.m
결과
- There can only be one category with the same name. Additional cateogies may be added on with different but unqiue names.
- 카테고리는 인스턴스 변수를 가질 수 없음.
- Categories are useful for creating private methods. Obejctive-C에는 java의 private/protected/public 같은 개념이 없어서 카테고리로 그런 기능을 할 수 있다. 단 class의 private 메소드를 .m 파일에 옮겨놓을 것. 다음이 좋은 예.
MyClass.h
MyClass.m
main.m
- private 메소드로 쓰는 건 좋으나 그 외에는 솔직히 어디다 써야할 지 감이 안 옴...
Fraction.h
#import <Foundation/NSObject.h> @interface Fraction: NSObject { int numerator; int denominator; } -(Fraction*) initWithNumerator: (int) n andDenominator: (int) d; -(Fraction*) initWithNumerator: (int) n denominator: (int) d; -(void) print; -(void) setNumerator: (int) n; -(void) setNumerator: (int) n andDenominator: (int) d; -(void) setDenominator: (int) d; -(int) numerator; -(int) denominator; @end |
Fraction.m
#import "Fraction.h" #import <stdio.h> @implementation Fraction -(Fraction*) initWithNumerator: (int) n andDenominator: (int) d { self = [super init]; if(self) { [self setNumerator: n andDenominator: d]; } return self; } -(Fraction*) initWithNumerator: (int) n denominator: (int) d { self = [super init]; if(self) { [self setNumerator: n andDenominator: d]; } return self; } -(void) print { printf( "%i/%i", numerator, denominator ); } -(void) setNumerator: (int) n { numerator = n; } -(void) setNumerator: (int) n andDenominator: (int) d { numerator = n; denominator = d; } -(void) setDenominator: (int) d { denominator = d; } -(int) denominator { return denominator; } -(int) numerator { return numerator; } @end |
FractionMath.h
#import "Fraction.h" @interface Fraction (Math) -(Fraction*) add: (Fraction*) f; -(Fraction*) mul: (Fraction*) f; -(Fraction*) div: (Fraction*) f; -(Fraction*) sub: (Fraction*) f; @end |
FractionMath.m
#import "FractionMath.h" @implementation Fraction (Math) -(Fraction*) add: (Fraction*) f { return [[Fraction alloc] initWithNumerator: numerator * [f denominator] + denominator * [f numerator] denominator: denominator * [f denominator]]; } -(Fraction*) mul: (Fraction*) f { return [[Fraction alloc] initWithNumerator: numerator * [f numerator] denominator: denominator * [f denominator]]; } -(Fraction*) div: (Fraction*) f { return [[Fraction alloc] initWithNumerator: numerator * [f denominator] denominator: denominator * [f numerator]]; } -(Fraction*) sub: (Fraction*) f { return [[Fraction alloc] initWithNumerator: numerator * [f denominator] - denominator * [f numerator] denominator: denominator * [f denominator]]; } @end |
main.m
#import <stdio.h> #import "Fraction.h" #import "FractionMath.h" int main( int argc, const char *argv[] ) { // create a new instance Fraction *frac1 = [[Fraction alloc] initWithNumerator: 1 denominator: 3]; Fraction *frac2 = [[Fraction alloc] initWithNumerator: 2 denominator: 5]; Fraction *frac3 = [frac1 mul: frac2]; // print it [frac1 print]; printf( " * " ); [frac2 print]; printf( " = " ); [frac3 print]; printf( "\n" ); // free memory [frac1 release]; [frac2 release]; [frac3 release]; system("PAUSE"); return 0; } |
결과
1/3 * 2/5 = 2/15 계속하려면 아무 키나 누르십시오 . . . |
- There can only be one category with the same name. Additional cateogies may be added on with different but unqiue names.
- 카테고리는 인스턴스 변수를 가질 수 없음.
- Categories are useful for creating private methods. Obejctive-C에는 java의 private/protected/public 같은 개념이 없어서 카테고리로 그런 기능을 할 수 있다. 단 class의 private 메소드를 .m 파일에 옮겨놓을 것. 다음이 좋은 예.
MyClass.h
#import <Foundation/NSObject.h> @interface MyClass: NSObject -(void) publicMethod; @end |
MyClass.m
#import "MyClass.h" #import <stdio.h> @implementation MyClass -(void) publicMethod { printf( "public method\n" ); } @end // private methods @interface MyClass (Private) -(void) privateMethod; @end @implementation MyClass (Private) -(void) privateMethod { printf( "private method\n" ); } @end |
main.m
#import "MyClass.h" int main( int argc, const char *argv[] ) { MyClass *obj = [[MyClass alloc] init]; // this compiles [obj publicMethod]; // this throws errors when compiling //[obj privateMethod]; // free memory [obj release]; return 0; } |
- private 메소드로 쓰는 건 좋으나 그 외에는 솔직히 어디다 써야할 지 감이 안 옴...
'프로그래밍 > iPhone Dev' 카테고리의 다른 글
[Objective C] 10 Protocols (0) | 2009.11.11 |
---|---|
[Objective C] 09 Posing (0) | 2009.11.10 |
[Objective C] 07 DynamicTypes (0) | 2009.10.30 |
[Objective C] 06 Inheritance (1) | 2009.10.30 |
[Objective C] 05 The Id Type (1) | 2009.10.29 |