芝蘭之交

simp.egloos.com

포토로그



[Objective C] boxing (NSArray 에 int 형 변수 넣기)

objective C 에서 boxing 과 unboxing 은 자동으로 이루어지지 않는다.  닷넷 C#환경에서 한참이나 살아온 필자로써는 여간 불편한 일이 아니다. boxing 이란 Stack 변수를 Heap 변수로 만들어주는 것을 말하고 unboxing은 그 반대를 말한다.  다르게 표현하면 value type 을 reference type 으로 바꾼다고도 말할 수 있겠다. 

이 과정이 자동으로 이루어지지 않기에 수동으로 해주어야 한다. 예를들면 컬렉션 클래스에 넣는다거나 할때 말이다. 


NSArray *array = [[NSArray alloc] initWithObjects: 1, 2, nil];


이렇게 하면 실제로 array에 값이 세팅되지 않는다. 1, 2 와 같은 primitive type 은 NSArray 에 넣을 수 없기 때문이다. 오직 reference type ( pointer type ) 만 넣을 수 있기 때문이다.

다행히 Wrapping 클래스가 존재한다.

NSArray *array = [[NSArray alloc] initWithObjects

  [NSNumber numberWithInt: 1],

  [NSNumber numberWithInt: 2], nil];


와 같이 NSNumber 클래스를 이용해서 넣어주어야 한다. 불편하다.


물론 다시 꺼내는 쪽에서도 값을 꺼내는 또 다른 메서드가 필요하게 되어 문제가 발생할 수 있다. 



불편하고 코딩량이 늘어나고 버그 발생 소지가 늘었다.



프로젝트 진행 중에 int --> long long int 와 같이 타입 변경에 약할 수 밖에 없는 구조를 가져갈 수 있으므로 이렇게 직접 이용하는 방식은 그다지 좋은 방법이 아니며, 데이터는 역시 데이터 클래스로 묶어서 넘기는 것이 좋겠다. 특히나 objective C 에서는 선택이 아닌 필수 일 수 밖에 없을 것 같다.







덧글

댓글 입력 영역