본문 바로가기

C/Objective C/Objective C

Objective C Number Object(숫자 객체) 다루는 예제 따라하기

숫자객체

지금까지 다룬 정수, 부동소수점 수, long 같은 모든 숫자 형은 Objective-C 언어의 기본 데이터 형이었 다. 다실 말해, 이것들은 객체가 아니었다. 그러므로 이것에 머세지 같은 것을 보내는 일은 불가능하다. 그런데 이런 형 값을 객체로 다뤄야 할 때가 있다.
예를 들어, Foundation 객체인 NSArray는 값을 저장할 수 있는 배열을 생성하도록 해준다. 이 값들은 객체여야 하기 때문에 이 배열들에 기본 데이터 형을 바로 저장할 수는 없다. 그 대신, 기본 숫자 데이터 형을 참조하려면(char 데이터 형도 포함) NSNumber 클래스를 사용하여 이 데이터 형들에게서 객체를 생 성할 수 있다. 


- 소스코드

#import <Foundation/Foundation.h>


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

{


NSNumber * myNumber , *floatNumber, *intNumber;

//integer value

NSInteger myInt;

intNumber = [NSNumber numberWithInt:100]; 

myInt = [intNumber integerValue]; 

NSLog(@"%li", (long) myInt);

// long int

myNumber = [NSNumber numberWithLong:0xabcdef]; 

NSLog(@"%lx",[myNumber longValue]);

//char value

myNumber = [NSNumber numberWithChar: 'X']; 

NSLog(@"%c", [myNumber charValue]);

// float value

floatNumber = [NSNumber numberWithFloat: 100.00]; 

NSLog(@"%g", [floatNumber floatValue]);

//double

myNumber = [NSNumber numberWithDouble: 12345e+15]; 

NSLog(@"%lg", [myNumber doubleValue]);

//wrong access here

NSLog(@"%li", [myNumber integerValue]); //test two numbers

if ([intNumber isEqualToNumber:floatNumber] == YES

NSLog(@"Numbers are equal");

else

NSLog(@"Numbers are not equal");

//test if one number is < , ==, or > second num

if ([intNumber compare:myNumber] == NSOrderedAscending) NSLog(@"First number is less than second");

else

NSLog(@"first number is not less than second");

    return 0;

} 

NSNumber 클래스에는 초기값이 있는 NSNumber 객체를 생성하는 메서드가 많다. 다음 예를 보자. intNumber = [NSNumber numberWithInteger: 100];

이 코드는 값이 100인 정수에게서 객체를 생성한다.
NSNumber 객체에서 받아 오는 값은 그 안에 저장된 값과 데이터 형이 일치해야 한다.
각 기본 값에 대해서는 NSNumber 객체를 생성하고 지정한 값으로 설정하는 클래스 메서드가 존재한다.

이 메서드들은 numberWithLong:과 numberWithFloat:처럼 numberWith로 시작하고, 그 뒤에 데이터 형이 붙는다. 게다가 인스턴스 메서드를 사용하여 이미 생성해 놓은 NSNumber 객체의 값을 원하는 대로 지정할 수 있다. 인스턴스 메서드들은 initWithLong:과 initWithFloat:처럼 모두 initWith로 시작한다. 


- NSNumber 생성과 값을 받는 메소드


- 실행화면