Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
iOS Developer/Objective-C

9. Objective-C NSNumbers

by Toughie 2024. 5. 7.

KAKAO-Choonsik

 

NSNumber는 기본 데이터 타입(int, float, double)을 객체로 감싸는 래퍼 클래스이다.

Objective-C에서 컬렉션 클래스는 기본 타입이 아닌, 객체 타입만 저장할 수 있기 때문에 래핑하는데 주로 사용된다.

또한 비교나 연산작업을 할 때 더 편리한 기능들이 제공된다.

 

NSNumber 객체를 생성하고, value를 뽑아내는 예시 코드는 아래와 같다.

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // NSNumber 객체 생성
        NSNumber *boolNumber = [NSNumber numberWithBool:YES];
        NSNumber *charNumber = [NSNumber numberWithChar:'A'];
        NSNumber *doubleNumber = [NSNumber numberWithDouble:3.14159];
        NSNumber *floatNumber = [NSNumber numberWithFloat:3.14];
        NSNumber *intNumber = [NSNumber numberWithInt:42];
        NSNumber *integerNumber = [NSNumber numberWithInteger:123456];
        
        // NSNumber 객체에서 값 추출
        BOOL boolValue = [boolNumber boolValue];
        char charValue = [charNumber charValue];
        double doubleValue = [doubleNumber doubleValue];
        float floatValue = [floatNumber floatValue];
        int intValue = [intNumber intValue];
        NSInteger integerValue = [integerNumber integerValue];

        // 값 출력
        NSLog(@"Boolean Value: %d, %@",boolValue, boolValue ? @"YES" : @"NO"); //1, YES
        NSLog(@"Char Value: %c", charValue); //65
        NSLog(@"Double Value: %f", doubleValue); //3.1416
        NSLog(@"Float Value: %f", floatValue); //3.1400
        NSLog(@"Integer Value: %d", intValue);//42
        NSLog(@"Integer Value (NSInteger): %ld", (long)integerValue); //123,456
        
        // NSNumber 객체를 문자열로 변환하여 출력
        NSLog(@"String Value of Double: %@", [doubleNumber stringValue]); //3.14159
    }
    return 0;
}

 

다른 언어에서 래퍼 클래스랑 동일하다고 생각해도 되겠다.

기본값만으로는 한계가 있을 때, 이를 확장해서 편리하게 사용하고 여러 함수, 컬렉션 등에서 타입을 맞출 때 필요하면 사용하자