'setter/getter의 함수형 선언'에 해당되는 글 1건

  1. 2010.03.01 setter와 getter만들기
Objc에서 클래스 메서드는 다른 곳에 선언된 인스턴스 변수를 참조하지 못한다.(어쩌면 당연한 일이다...모든 객체와 데이터는 캡슐화가 되어야 하기때문이기도 하지만 자연스레...그렇게들 알고있으니까...다 그래!)  따라서 헤더파일에서 @property를 선언하고 @synthesize하여 해당 변수의 setter와 getter를 자동으로 설정하여 값을 참조하고 설정할 수 있는데 아직 NS객체들에 대하여 깊이 모르므로 지금은 
그냥 setter/getter를 함수로 만들어 사용하여 본다.

#import <Foundation/Foundation.h>


//-------------- interface section -----------------

@interface Fraction : NSObject

{

int numerator;

int denominator;

}


-(void) print;

/*

 클래스메서드는 인스턴스 다른 곳의 인스턴스변수에 접근할 없다

 따라서 함수 setter/getter 만들어 함수의 return값을 통해 인스턴스 변수의 값을 참조할 있다.

 또는 헤더파일에서 @property 설정할 있다. 그러면 자동으로 setter/getter 사용 있도록 속성을 설정할 있다.

 actionscript 다르게 같은 이름의 변수와 함수명에 대하여 에러를 발생하진 않는다.

 */

-(void) setNumerator:(int) n;//numerator setter

-(void) setDenominator:(int) d;//denominator setter


-(int) numerator; //numerator getter

-(int) denominator;//denominator getter

@end


//--------------- implementation section ---------------

@implementation Fraction


-(void) print

{

NSLog(@"%i/%i", numerator, denominator);

}


//인스턴스 변수의 setter부분

-(void) setNumerator:(int) n

{

numerator = n;

}

-(void) setDenominator:(int) d

{

denominator = d;

}


//인스턴스 변수의 getter부분

-(int) numerator

{

return numerator;

}

-(int) denominator

{

return denominator;

}

@end


//--------------- program section ----------------

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...

    Fraction*myFraction = [Fraction new];

    [myFraction setNumerator:1];

    [myFraction setDenominator:3];

    NSLog(@"The Value of myFraction is %i/%i", [myFraction numerator] , [myFraction denominator]);

    [myFraction release];

    [pool drain];

    return 0;

}


위의 코드는 getter함수를 만들어 출력시에 인스턴스가 가지고 있는 변수를 반환하는 함수로 접근하여 값을 받아와 출력하였다.
또한 인스턴스 생성시 alloc와 init의 두가지 행동을 하나로 합하여 new라는 메서드로 처리하였다.
Posted by 버터백통