대단히 자연스러운 코드지만 Objective-C로 작성할때는 왠지 이상한…

요새는 Windows에서 넘어온 Objective-C 프로그래머들이 꽤 되어서, 그리고 말이 Objective-C 코드이지 Objective-C++도 아니고 C++로 하는 사람들이 많은 것이 사실이지만, 오랫동안 Objective-C 프로그래밍을 한 사람들의 코드를 보면 공통점이 있다. 우선 dynamic object를 많이 사용한다는 점 (아무래도 Cocoa object의 100%가 동적으로 instantiation되는 것을 요구하니까), 그리고 어레이 선언을 NSArray로 하지 myClass A[5] 같은 식으로 하지 않는다는 것이다.

자 보자.


NSString myString( @"my sample string" );

NSString myStringArray[5];

(다른 언어에선 자주 사용할 법한 표현이지만 Objective-C에서는 맞지 않는 예)

그러고 보니 그러지 않은가? 아마 이런 것을 의도적으로 하다보면, Objective-C의 컴파일러/런타임의 버그를 꽤 발견할 수있을 것 같다. 그런데, 여기서 이상한 점. 처음으로 Objective-C를 배울때, C/C++에서는 많이 사용하던 저런 것을, 이상하게 사용할 생각이 나지 않는 것이었다. 왜 그럴까? C/C++을 잡는 순간 저런 코딩을 하게 되는데 말이다.
아무튼 저런 선언은 옳지가 않다.

그런데, 잘 사용하지 않지만, 아니 전혀 사용하지 않지만 맞는 표현이 있다.


// Create an array of pointers
NSString *filePaths[5] = {
	@"/Reel/Clip/Media/test_001_001001.dpx",
	@"/Reel/Clip/Media/test_001_001002.dpx",
	@"/Reel/Clip/Media/test_001_001003.dpx",
	@"/Reel/Clip/Media/test_001_001004.dpx",
	@"/Reel/Clip/Media/test_001_001005.dpx"
};

int i;
for( i = 0; i < 5; i++)
{
	NSLog( @"%@", filePaths[i] );
}

일전에 어떤 사람이 Objective-C는 NSString *variable = @”…”이 data section에 된다고 했다. 보통 static variable (여기서 static variable은 dynamic variable에 상대되는 static이지 함수를 여러번 호출해도 이전 invocation때의 값이 유지되는 그런 static의 개념이 아니다. 사족이지만 Computer Language에서 이 static이란 말은 여러 의미로 쓰인다. extern도 마찬가지고. )은 stack에 할당이 되는데, 그 사람은 data section에 된다고 한다. 좀 이해가 안되긴 하는데… data section 중에 stack이 있나? 그건 아닌데? assembly language로 작성하면 차이가 있는데…
아무튼…저렇게 정적으로 할당되는 것은 저런 식의 array를 사용할 수가 있다. 이건 얼핏 보기에도 NSArray의 인스턴스에 집어넣는 것보다 cost가 덜 할 것으로 생각된다.

One response to this post.

  1. Posted by objectiveStranger on December 29, 2011 at 4:14 AM

    맞아요

    왠지 이상하게 Objective-C 잡으면 C 의 superset이라는 게 무색하게
    몇일전에 익숙하게 하던 C, C++ 코드가 너무 어색하게 느껴지고,
    넣고자 하질 않게 됨..

    Reply

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: