본문 바로가기
Object-C

7장 클래스에 대해서

by 풍야 2010. 3. 14.

<인터페이스와 구현 파일 나누기>

Interface 부분은 *.h 파일로 만들고

Implementation 부분 + program 부분은 main 소스파일(*.m)로  만들면 된다.

메인 파일 만들때 #import "파일이름.h" 추가하는 것은 잊지 말아야 한다.

또한 implementation, program 파일은 따로따로 만들어 주는 것이 정석이다.


<자동 생성 접근자 메서드>

Object-2.0 부터는 세터와 게터 메서드(둘다 합쳐서 접근자 메서드라고 한다.)를 자동으로 생성할 수 있다.

1. 인터페이스 부분에서 @property 지시어를 사용하여 지정한다.
    임플리멘트에 @synthesize 넣어주면 컴파일러가 자동으로 생성된다.

@interface Fraction : NSObject
{
   int numerator;
   int denominator;
}

@property int numerator, denominator;

- (void) print;
- (void) convertToNum;

@end

#import "Fraction.h"

@implement Fraction

@synthesize numerator, denominator;

- (void) print
.....

- (double) convertToNum
.....

@end


<점 연산자를 사용하여 프로퍼티에 접근하기>

[myFraction numerator] = myFraction.numerator

myFraction.numerator = value 는 [myFraction.numerator : value] 로 나타낼 수도 있다.

ex. [myFraction setNumerator : 1]; 
     myFraction.numerator = 1;


<메서드에 여러 인수 넘겨주기>

[myFraction setNumerator : 1 andDenominator : 3];


#import <Foundation/Foundation.h>

@interface Fraction : NSObject
{
   int numerator;
   int denominator;
}

@property int numerator, denominator;

- (void) print;
- (void) setTo : (int) n over: (int) d;
- (double) convertToNum;
- (void) add: (Fraction *) f;
- (void) reduce;

@end

@implementation Fraction

@synthesize numerator, denominator;

- (void) print
{
   NSLog(@"%i%i", numerator, denominator);
}

- (double) convertToNum
{
   if (denominator!=0)
      return (double) numerator / denominator;
   else
      return 1;
}

- (void) setTo : (int) n over: (int) d
{
   numerator = n;
   denominator = d;
}

- (void) add: (Fraction *) f
{
   numerator = numerator * f.denominator + denominator * f.numerator;
   denominator = denominator * f.denominator
}

- (void) reduce  // 약분
{
   int u = numerator;
   int v = denominator;
   int temp;

  while (v!=0) {
     temp = u % v;
     u=v;
     v=temp;
   }

   numerator /= u;
   denominator /= u;
}


@end

int main(int argc, char *argv[])
{
   Fraction *aFraction = [[Fraction alloc] init];
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  [aFraction setTo : 1 over: 2];
  [bFraction setTo : 1 over: 4];


   [aFraction print];
   NSLog(@"+");
   [bFraction print];
   NSLog(@"=");
   [aFraction add: bFraction];

  [aFraction reduce];
   [aFraction print];

   [aFraction release];
   [bFraction release];

   [pool drain];
   return 0;
}

// 분수 계산하기


#import "Fraction.h"

int main(int argc, char *argv[])
{
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  
   Fraction * aFraction = [[Fraction alloc] init];
   Fraction *sum = [[Fraction alloc] init], *sum2;
   int i, n, pow2;

  [sum setTo : 0 over : 1];

  NSLog(@"Enter your value for n: ");
  scanf("%i", &n);

  pow2 = 2;
  
  for(i=1, i<=n; ++i){
    [aFraction setTo : 1 over : pow2];
    sum2 = [sum add: aFraction];
    [sum release];
    sum = sum2;
    pow2 *= 2;
  }

 NSLog(@"After %i iterations, the sum is %g",n, [sum convertToNum]);
 [aFraction release];
 [sum release];

 [pool drain];
 return 0;
}
 







출처 : Programming in Object-C 2.0 / 스티븐 코찬 지음, 박세헌 옮김 / 인사이트 출판