카테고리 사용 용도
1. 기존에 구현 된 클래스에 대한 이해 없이 당장 필요한 기능(메소드)
// Fraction.h 파일
// Fraction.m 파일
// Fraction MathOps 구현 부분
1. 기존에 구현 된 클래스에 대한 이해 없이 당장 필요한 기능(메소드)
// Fraction.h 파일
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
@property int numerator, denominator;
// 하단의 getter setter 를 @property 선언 만으로도 선언되어짐
//- (void) setNumerator: (int)n; // 이렇게 선언 하면 외부에서 접근 가능
//- (void) setDenominator: (int)d;
//- (int) numerator;
//- (int) denominator;
-(void) print;
@end
// Fraction.m 파일
#import "Fraction.h"
@implementation Fraction
{
int isStarted;
}
@synthesize numerator = _numerator, denominator = _denominator;
//{
// int numerator;
// int denominator;
//}
//- (void) setNumerator:(int)n
//{
// numerator = n;
//}
//
//- (void) setDenominator:(int)d
//{
// denominator = d;
//}
//
//- (int) numerator
//{
// return numerator;
//}
//
//- (int) denominator
//{
// return denominator;
//}
- (void) print // interface부에 선언되지 않은 함수는 외부(다른소스코드파일)에서 접근 불가
{
static int printCnt = 0; // Fraction 클래스 인스턴스에서 1개만 존재 함.
NSLog(@"[%i] %i/%i", printCnt++, _numerator, _denominator);
}
@end
// Fraction MathOps 구현 부분
#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{
isStarted = 1;
Fraction* result = [[Fraction alloc]init];
result.numerator = (self.numerator * f.denominator) + (self.denominator * f.numerator);
result.denominator = self.denominator * f.denominator;
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;
return result;
}
-(Fraction*) mul:(Fraction *)f{
Fraction* result = [[Fraction alloc]init];
result.numerator = self.numerator * f.numerator;
result.denominator = self.denominator * f.denominator;
return result;
}
-(Fraction*) div:(Fraction *)f{
Fraction* result = [[Fraction alloc]init];
result.numerator = self.numerator * f.denominator;
result.denominator = self.denominator * f.numerator;
return result;
}
@end
소스코드를 보면 Fraction.m 에서 클래스 멤버변수를 선언한 부분이 있다.
implementation 부 에서 선언 된 멤버변수는 다른 파일에 구현 된 MathOps 카테고리에서 접근 불가능 하다.
왜냐하면, 원조 Fraction 클래스에서 공개되어 있는 메소드와 멤버변수는 Fraction.h 에 선언된 것 뿐이기 때문!!
2. 메소드 오버라이딩
3. 메소드의 외부 노출 없이 사용하고 싶다.
// Fraction.h
// Fraction.m
이렇게 하면 add, mum, sub, div 함수는 외부 공개 없이 내부에서 자유롭게 사용 가능하다.
2. 메소드 오버라이딩
3. 메소드의 외부 노출 없이 사용하고 싶다.
// Fraction.h
@interface Fraction : NSObject
@end
// Fraction.m
@interface Fraction()
-(Fraction*) add:(Fraction*) f;
-(Fraction*) mul:(Fraction*) f;
-(Fraction*) sub:(Fraction*) f;
-(Fraction*) div:(Fraction*) f;
@end
@implementation Fraction
-(Fraction*) add:(Fraction *)f{
Fraction* result = [[Fraction alloc]init];
return result;
}
-(Fraction*) sub:(Fraction *)f{
Fraction* result = [[Fraction alloc]init];
return result;
}
-(Fraction*) mul:(Fraction *)f{
Fraction* result = [[Fraction alloc]init];
return result;
}
-(Fraction*) div:(Fraction *)f{
Fraction* result = [[Fraction alloc]init];
return result;
}
@end
댓글 없음:
댓글 쓰기