์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
TIOBE ์„ ์ • ์˜ฌํ•ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
2010๋…„
Python
โ†’
2011๋…„
Objective-C
โ†’
2012๋…„
Objective-C
2011๋…„
Objective-C
โ†’
2012๋…„
Objective-C
โ†’
2013๋…„
Transact-SQL


1. ๊ฐœ์š”2. ์—ญ์‚ฌ3. ํŠน์ง•
3.1. C์˜ ํ™•์žฅ3.2. C++์™€์˜ ๋น„๊ต3.3. ๋ฌธ๋ฒ•
4. ์—ฌ๋‹ด5. ์œ„๊ธฐ6. Cocoa ๊ธฐ๋ฐ˜ ์–ธ์–ด7. ๊ด€๋ จ ๋ฌธ์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

// First program example
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        NSLog (@"Hello, World!");
        [pool drain];
        return 0;
}

C ์–ธ์–ด์—์„œ ํŒŒ์ƒ๋œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. ์˜ค๋ธŒ์ ํŠธ์‹œ(Object-C)๋ผ๊ณ  ์•„๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์€๋ฐ, '์˜ค๋ธŒ์ ํ‹ฐ๋ธŒ์‹œ'๋‹ค. ๊ตญ๋‚ด ํ•œ์ •์œผ๋กœ ๋ณดํ†ต ์ค„์—ฌ์„œ ์˜ต์”จ, ์˜ค๋ธŒ์ ์”จ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ด ๋ฌธ์„œ๋„ ํ•ด๋‹น ํ•ญ๋ชฉ์œผ๋กœ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

2. ์—ญ์‚ฌ[ํŽธ์ง‘]

1983๋…„์— ๋ธŒ๋ž˜๋“œ ์ฝ•์Šค์™€ ํ†ฐ ๋Ÿฌ๋ธŒ๊ฐ€ '์Šค๋ชฐํ† ํฌ(Smalltalk)์˜ ๋ฌธ๋ฒ•์„ C์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„๊นŒ?'๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๋‹ค๊ฐ€ ๋งŒ๋“ค์—ˆ๋‹ค. ๋‹น์‹œ ์• ํ”Œ์—์„œ ์ซ“๊ฒจ๋‚˜ ๋„ฅ์ŠคํŠธ ์‚ฌ๋ฅผ ์ฐจ๋ฆฐ ์Šคํ‹ฐ๋ธŒ ์žก์Šค์˜ ๋ˆˆ์— ๋„์–ด Swift๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ „๊นŒ์ง€ ์• ํ”Œ์˜ ํ‘œ์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์‚ฌ์šฉ๋˜์–ด ์™”๋‹ค. ๋„ฅ์ŠคํŠธ๊ฐ€ ์•„์˜ˆ ์ด ์–ธ์–ด์˜ ๋ชจ๋“  ๊ถŒ๋ฆฌ๋ฅผ ๊ตฌ๋งคํ•ด๋ฒ„๋ ธ๊ณ , ์ด๊ฑด ๊ณ ์Šค๋ž€ํžˆ ์• ํ”Œ์—๊ฒŒ ๋„˜์–ด๊ฐ„ ๊ฒƒ. ์ง€๊ธˆ๋„ Objective-C ์–ธ์–ด์˜ ํ‘œ์ค€ํ™”์™€ ์ŠคํŽ™ ๊ด€๋ฆฌ๋ฅผ ์ฑ…์ž„์ง€๋Š” ์ฃผ์ฒด๊ฐ€ ์• ํ”Œ์ด๋‹ค.[1]

3. ํŠน์ง•[ํŽธ์ง‘]

3.1. C์˜ ํ™•์žฅ[ํŽธ์ง‘]

์•ˆ์‹œ(ANSI) C ์–ธ์–ด์— ๋ฌดํ˜•์„ฑ(untyped) ์ˆœ์ˆ˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ธ ์Šค๋ชฐํ† ํฌ ํ˜•์‹์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํ™•์žฅ ํ˜•ํƒœ๋กœ ์–น์€ ์–ธ์–ด๋กœ[2], ์‹ค์ œ๋กœ๋Š” C ์–ธ์–ด๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.[3] ๊ทธ๋Ÿฌ๋‚˜, C์˜ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋ฐ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์˜ ์ƒ๋‹น์ˆ˜๋ฅผ Objective-C์˜ ๊ฐ์ฒด๋‚˜ ์ฝ”์ฝ”์•„ ๋“ฑ์—์„œ ๋ณด๋‹ค ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋Œ€์ฒดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์ฝ”๋“œ์— ์ˆœ์ˆ˜ C ๋ถ€๋ถ„์€ ๋งŽ์ด ๋ณด์ด์ง€ ์•Š๋Š” ํŽธ์ด๋‹ค. ์ฆ‰, ๋ชจ๋“  C ์ฝ”๋“œ๊ฐ€ ๋‹ค ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ•˜๊ธด ํ•˜์ง€๋งŒ[4], C์˜ ํ™•์žฅ์ด๋ผ๊ธฐ๋ณด๋‹ค C์— Objective-C๋ผ๋Š” ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ๋ฎ์–ด์”Œ์šด ๊ฒƒ์— ๊ฐ€๊น๋‹ค.

C๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณ„๋„์˜ ์ถ”๊ฐ€ ๋Ÿฐํƒ€์ž„ ์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜ํ•ด, Objective-C๋Š” C ์–ธ์–ด์— ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  JVM๊ฐ™์€ ๊ฐ€์ƒ ๋จธ์‹  ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ [5], ๊ทธ์ € ๊ฐ์ฒด๊ฐ„์˜ ํ†ต์‹ ('๋ฉ”์‹œ์ง•'์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.)์„ ์ง€์›ํ•˜๋Š” ์ดˆ์†Œํ˜•์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.[6]

3.2. C++์™€์˜ ๋น„๊ต[ํŽธ์ง‘]

C์˜ ํ™•์žฅ์ด๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ์ธก๋ฉด์—์„œ C++์™€ ์ž์ฃผ ๋น„๊ต๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์‚ฌ์‹ค ๋‘ ์–ธ์–ด๋Š” ๋ฐœ์ „์˜ ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅด๋‹ค. C++๋Š” Objective-C์— ๋น„ํ•˜๋ฉด ํ›จ์”ฌ ์œก์ค‘ํ•œ ์–ธ์–ด๋กœ, ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋งŽ๋‹ค. ์‹คํ–‰ ์‹œ๊ฐ„์— ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋œ Objective-C์™€๋Š” ๋‹ฌ๋ฆฌ C++์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„์„ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋˜์–ด์žˆ์–ด ์‹คํ–‰ ์‹œ๊ฐ„์˜ ์Šค๋ฃจํ’‹ ์—ญ์‹œ C++ ์ชฝ์ด ์›”๋“ฑํ•˜๋‹ค. ๋‹ค๋งŒ ๊ทธ๋Ÿฐ ๋งŒํผ ๋ฐฐ์šฐ๊ธฐ๋„ ํž˜๋“ค๊ณ , ๋ฐฐ์›Œ์„œ ๊ทธ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํ›จ์”ฌ ๋” ํž˜๋“ค๋‹ค.[7] ์ฃผ์š” ์ปดํŒŒ์ผ๋Ÿฌ[8]๊ฐ€ C++17 ํ‘œ์ค€ ๊นŒ์ง€์˜ ๊ธฐ๋Šฅ์„ ๋Œ€๋ถ€๋ถ„ ๊ตฌํ˜„ํ•œ ์ƒํƒœ์ด๊ธด ํ•˜์ง€๋งŒ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์›Œ๋‚™ ๋งŽ๋‹ค ๋ณด๋‹ˆ ์ปดํŒŒ์ผ๋Ÿฌ๋งˆ๋‹ค ์•„์ง ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋‹ค.[9] Objective-C๋Š” ๊ฑฐ๊ธฐ์— ๋น„ํ•˜๋ฉด ํ›จ์”ฌ ๋‹จ์ˆœํ•œ ์–ธ์–ด์ด๊ณ  ์• ํ”Œ ๊ธฐ๊ธฐ์—์„œ์˜ ์‚ฌ์šฉ๋งŒ์„ ๊ณ ๋ คํ•ด์„œ ๋Œ€์ƒ ๊ธฐ๊ธฐ์˜ ํญ์ด ๋ฌด์ฒ™ ์ข๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋น„๋ก C++๊ฐ€ C์—์„œ ํŒŒ์ƒ๋๋‹ค๊ณ  ํ•ด๋„, ์ด๋ฏธ C๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ์—” ๋„ˆ๋ฌด ์ง„ํ™”ํ•ด๋ฒ„๋ฆฐ ์–ธ์–ด[10]์ธ ๋ฐ ๋ฐ˜ํ•ด, Objective-C๋Š” ๊ทธ๋ƒฅ C ์–ธ์–ด ์œ„์— ๊ฐ์ฒด ์ง€ํ–ฅ ๋“ฑ์˜ ํ™•์žฅ์„ ์ถ”๊ฐ€ํ•œ ์ˆ˜์ค€์ด๋‹ค. ์ฆ‰, Objective-C๋Š” ๊ณง C๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

Objective-C์˜ ๋‚ด๋ถ€๋กœ ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€์ž๋ฉด, Objective-C์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์‚ฌ์‹ค C์˜ ๊ตฌ์กฐ์ฒด(struct)๋กœ ์ด๋ฃจ์–ด์ง€๊ณ , ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์ฒด(==ํ•จ์ˆ˜)๋กœ์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํด๋ž˜์Šค ๊ฐ์ฒด[11]์˜ ๊ตฌ์กฐ์ฒด ์•ˆ์— ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋“ค๊ณ  ์žˆ๋‹ค. ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋Ÿฐํƒ€์ž„์˜ objc_msgSend๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ •ํ™•ํ•œ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์ฒด๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ํ˜•์‹์ด๋‹ค.[12] ๋•Œ๋ฌธ์— objc_msgSend ํ•จ์ˆ˜๋Š” ๊ทน๋„๋กœ ์งง๊ณ  ๋น ๋ฅธ ๋™์ž‘์ด ๋ณด์žฅ๋  ํ•„์š”๊ฐ€ ์žˆ์–ด์„œ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ๋žŒ์˜ ์†์œผ๋กœ ์ง์ ‘ ์ž‘์„ฑ๋๋‹ค. ์ธํ„ฐ๋„ท์—์„œ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ๋ช‡๋ช‡ ๊ตฌ๋ฃจ๋“ค์ด ๋ถ„์„ํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด, ์ตœ์•…์˜ ์ƒํ™ฉ์—์„œ๋„ ๋Œ€๋žต ์—ด๋ช‡ ๋ฒˆ์˜ CPU ์‚ฌ์ดํด์ด๋ฉด ์ •ํ™•ํ•˜๊ฒŒ ๋Œ€์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„์˜จ๋‹ค๊ณ  ํ•œ๋‹ค.[13] ๋ฌผ๋ก , ์„ค๊ณ„์ž๋“ค๋„ ์ด ๋ฐฉ์‹์ด ๋งค์šฐ ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ๊ณ , ๊ทธ๊ฒƒ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์บ์‹ฑ ๊ธฐ๋Šฅ[14]์„ ์ดˆ์ฐฝ๊ธฐ๋ถ€ํ„ฐ ์ง€์›ํ–ˆ๋‹ค. ๋ญ, ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด๋„ ์ด ์†๋„ ๋ฌธ์ œ ๋•Œ๋ฌธ์— OS X์„ ๊ฒจ๋ƒฅํ•˜๊ณ  ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ๋„ ํผํฌ๋จผ์Šค๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ[15]์—๋Š” Objective-C๋ณด๋‹ค๋Š” C++๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.[16]

์• ํ”Œ์€ ์ € ๋Ÿฐํƒ€์ž„์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์˜คํ”ˆ ์†Œ์Šค๋กœ ๊ณต๊ฐœํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋Ÿฐํƒ€์ž„๊ณผ Objective-C ์ง€์› ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ์žˆ๋‹ค๋ฉด OS X์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋„ Objective-C๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.[17] ๊ทธ๋ž˜์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด GNU์˜ ๊ทธ๋ˆ„์Šคํ…(GNUSTEP). ์‚ฌ์‹ค์ƒ Objective-C๋ฅผ ๋งฅ ์ „์šฉ์œผ๋กœ ๊ฐ•์ œํ•˜๋˜ ์ฝ”์ฝ”์•„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•ด ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ–ˆ๋‹ค.[18] ์ด๊ฒƒ ๋ง๊ณ ๋„, ๊ฐœ์ธ์ด ์ฝ”์ฝ”์•„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘์ด๊ธฐ๋„ ํ•˜๋‹ค.

3.3. ๋ฌธ๋ฒ•[ํŽธ์ง‘]

Objective-C์˜ ๋ฌธ๋ฒ•์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋งˆ๋‹ค ํ˜ธ๋ถˆํ˜ธ๊ฐ€ ํฌ๊ฒŒ ๊ฐˆ๋ฆฌ๋Š” ํŽธ์ธ๋ฐ, ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋งˆ๋‹ค ์–ด๋–ค ์šฉ๋„์ธ์ง€ ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ๊ณ  ๋‹จ์ˆœ ๋ธ”๋ก๋งŒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ๋‹ค๊ฐ€, ์ €๋Ÿฐ '๋…ํŠนํ•œ' ๋ฌธ๋ฒ•์ด ํ•ด๋‹น ์–ธ์–ด์˜ ์ง๊ณ„ ์„ ์กฐ์ธ ์ˆœ์ˆ˜ C์™€ ๋ช…๋ฃŒํ•˜๊ฒŒ ๊ตฌ๋ถ„์ด ๋˜๋Š” ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ๊ธฐ ์‰ฌ์šด ๋ฌธ๋ฒ•์ด๋ผ๋ฉฐ ์ฐฌ์–‘ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ๋Š” ๋ฐ˜๋ฉด, C์™€ 100% ํ˜ธํ™˜์ด ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ๋ฌธ๋ฒ•์„ ๊ฑฐ์˜ ๋‹ค C ์Šคํƒ€์ผ๋กœ ๋…น์—ฌ๋‚ธ C++/Java/C# ๋“ฑ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์ด์ € ์–ธ์–ด๋“ค๊ณผ๋Š” ๋‹ค๋ฅธ ๊ธธ์„ ๊ฑท๊ณ  ์žˆ๊ธฐ์— ๋ˆˆ์— ๊ฑฐ์Šฌ๋ฆฐ๋‹ค๋ฉฐ ๋น„ํŒํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ๋งŽ๋‹ค.

์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„, Objective-C ์ฐฌ์–‘๋ก ์ž๋“ค์€ Objective-C ์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ถ€๋ถ„์„ ๋ฐ”๋กœ ์ € ์ด์ƒํ•œ ๋ฌธ๋ฒ•์—์„œ ์ฐพ๋Š”๋‹ค. ํŠนํžˆ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ๊ฐ๊ฐ์˜ ์ธ์ž์— ๋ ˆ์ด๋ธ”์„ ๋ถ™์—ฌ ์ด์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด ์˜ˆ์‹œ๋กœ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š”๋ฐ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์ธ C ๊ณ„์—ด ์–ธ์–ด์—์„œ๋Š” ๊ฐ๊ฐ ์ธ์ž๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ํ•จ์ˆ˜๋ช…๋งŒ ๋ด์„œ๋Š” ์•Œ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—[19] ๊ฐ๊ฐ ์ธ์ž์˜ ์œ„์น˜์™€ ์ˆœ์„œ๋ฅผ ๋”ฐ๋กœ ์™ธ์šฐ๋“ ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์จ์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Objective-C ์—์„œ๋Š” ๋ฉ”์†Œ๋“œ๋ช… ์ž์ฒด๊ฐ€ ์ €๋Ÿฐ ์ฝ”๋ฉ˜ํŠธ์˜ ์—ญํ• ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, (x, y) ์ขŒํ‘œ์™€ Width, Height ๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ Objective-C ์—์„œ๋Š” drawSquarePosX:PosY:Width:Height: ๊ฐ™์€ ํ•จ์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์‹ค์ œ ์‚ฌ์šฉ์‹œ์—๋Š”

[self drawSquarePosX:130 PosY:70 Width:100 Height:150];

์ฒ˜๋Ÿผ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”์‹œ์ง•ํ•˜๋Š” ์ค„๋งŒ ๋ณด๊ณ ์„œ๋„ ๊ทธ๊ฒŒ ์–ด๋–ค ๋ช…๋ น์ธ์ง€ ๋Œ€๋žต์ ์ธ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ, ์ € ๋ ˆ์ด๋ธ” ์ž์ฒด๊ฐ€ ๋ฉ”์†Œ๋“œ๋ช…์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— Width ์™€ Height ๋Œ€์‹  ๋˜๋‹ค๋ฅธ (x, y) ์ขŒํ‘œ๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ๊ฒฝ์šฐ์—๋„ ๋„ค์ด๋ฐ ์ปจํ”Œ๋ฆญํŠธ ์—†์ด drawSquarePosX:PosY:PosX:PosY: ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก , ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋ฉ”์†Œ๋“œ๋ช… ์ž์ฒด๊ฐ€ ์ข€ ๋” ๊ธธ์–ด์ง€๋Š” ๋ถ€์ž‘์šฉ์„ ๊ฐ–๊ณ ์žˆ์ง€๋งŒ, Objective-C ์˜ ์šฉ๋„์ƒ Xcode๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ณ„๋กœ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ๋กœ ์ƒ๊ฐ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋ณ„๋กœ ์—†๋Š” ๋“ฏ.

4. ์—ฌ๋‹ด[ํŽธ์ง‘]

์•ฑ ์Šคํ† ์–ด๊ฐ€ ์„ ํ’์ ์ธ ์ธ๊ธฐ๋ฅผ ๋Œ๊ฒŒ ๋˜๋ฉด์„œ Objective-C๋ฅผ ๋ฐฐ์›Œ์„œ ์•ฑ์„ ์ถœ์‹œํ•˜๋ ค๋Š” ์ผ๋ฐ˜์ธ๋“ค์ด ๋งŽ์•„์กŒ์œผ๋‚˜, Objective-C๊ฐ€ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šด ์–ธ์–ด๋Š” ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—[20], ์ค‘๋„ํ•˜์ฐจํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€ ํŽธ์ด๋‹ค. ์‚ฌ์‹ค C ์–ธ์–ด์™€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†๋‹ค๋ฉด, ๊ฝค ๊ณ ์ „ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

์ดˆ์ฐฝ๊ธฐ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋„ฅ์ŠคํŠธ์—์„œ GCC ์†Œ์Šค๋ฅผ ๋ชฐ๋ž˜ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ž์‹ ๋“ค๋งŒ์˜ Objective-C ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ GNU์—๊ฒŒ ๋”ฑ ๊ฑธ๋ ค์„œ, ๊ฒฐ๊ตญ ๋„ฅ์ŠคํŠธ๊ฐ€ GCC๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•œ Objective-C ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ธฐํƒ€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ GCC์—๊ฒŒ ๋Œ๋ ค์ฃผ๋Š” ํ˜•ํƒœ๋กœ ํ•ฉ์˜๋ฅผ ๋ดค๋‹ค๊ณ  ํ•œ๋‹ค. ์ดํ›„ ์• ํ”Œ์€ LLVM์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์˜ ์ปดํŒŒ์ผ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ต์งธ๋กœ ์ธ์ˆ˜ํ–ˆ๋‹ค.[21] ๋Œ€ํ•™์› ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘๋œ ๊ฒƒ์ธ๋ฐ, ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•œ ์‚ฌ๋žŒ(ํฌ๋ฆฌ์Šค ๋ž˜ํŠธ๋„ˆ; Chris Lattner(์œ„ํ‚ค๋ฐฑ๊ณผ์— ๋”ฐ๋ฅด๋ฉด ์•„๋ž˜์— ๋‚˜์˜ค๋Š” Swift๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๋‚˜์™€์žˆ๋‹ค.))์„ ์• ํ”Œ์ด ์Šค์นด์šฐํŠธํ–ˆ๋‹ค. ๋ฌผ๋ก  ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ์ „ํžˆ ์˜คํ”ˆ ์†Œ์Šค๋‹ค.[22]

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ, ์• ํ”Œ์˜ ๊ฑฐ์˜ ๋ชจ๋“  ์ œํ’ˆ์€ Objective-C ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, OS X์ด๋‚˜ iOS์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ํ•„์ˆ˜์ ์œผ๋กœ ์ตํ˜€์•ผ ํ•œ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๊ฐœ๋ฐœ์šฉ IDE์ธ Xcode๊ฐ€ ๋งฅ์—๋งŒ ์ถœ์‹œ๋๊ธฐ ๋•Œ๋ฌธ์—[23], ์ผ๋‹จ ๋งฅ ์ปดํ“จํ„ฐ๋ฅผ ๊ตฌ์ž…ํ•˜๋„๋ก ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์Šฌ์Šฌ ์• ํ”Œ๋น ๊ฐ€ ๋˜์–ด๊ฐ€๊ฒ ์ง€.

5. ์œ„๊ธฐ[ํŽธ์ง‘]


WWDC 2014์—์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Swift๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ํ‘œํ˜„, ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์™€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ์‹คํ–‰ ๋“ฑ์˜ ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  Obj-C์˜ ๋’ค๋ฅผ ์ž‡๋Š” ์• ํ”Œ์˜ ์ฐจ์„ธ๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž๋ฆฌ๋งค๊น€ ํ•  ๊ฒƒ์ด๋ผ๋Š” ํŒ€ ์ฟก๊ณผ ํฌ๋ ˆ์ด๊ทธ ํŽ˜๋”๋ฆฌํžˆ์˜ ์„ ์–ธ ํ•˜์— ์•ž์œผ๋กœ๋Š” Swift๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ์ž ์ง€์›์ด ์ด๋ฃจ์–ด์งˆ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. Obj-C๋Š” ์•ž์œผ๋กœ๋„ ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๊ณ„์† ์ง€์›์ด ๋  ์ˆ˜ ์žˆ๊ณ  ์‹ฌ์ง€์–ด ๊ธฐ์กด Obj-C ์ฝ”๋“œ ์‚ฌ์ด์— Swift ์ฝ”๋“œ๋ฅผ ์„ž์–ด ์“ธ ์ˆ˜๋„ ์žˆ๋Š” ๋“ฑ ์•„์ง๊นŒ์ง€๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฐ๋ ค๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ์ƒํ™ฉ์ด์ง€๋งŒ ์• ํ”Œ์˜ ๋ ˆ๊ฑฐ์‹œ ๋ฐฐ๋ ค์— ์•ˆ์ฃผํ•˜๋‹ค๊ฐ€๋Š” ์–ด๋–ค ๊ผด์ด ๋‚˜๋Š”์ง€๋Š” Carbon์ด 64๋น„ํŠธ ์‹œ๋Œ€์— ์–ด๋–ป๊ฒŒ ํ† ์‚ฌ๊ตฌํŒฝ์„ ๋‹นํ–ˆ๋Š”์ง€, ๋กœ์ œํƒ€ VM์ด ์–ผ๋งˆ๋‚˜ ์‹ ์†ํ•˜๊ฒŒ ํ‡ด์ถœ๋˜์—ˆ๋Š”์ง€, Cocoa์—์„œ์˜ Java ์ง€์›์ด ์ง€๊ธˆ ์–ด๋–ค ๊ผด์ธ์ง€๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋ป”ํ•œ ์ผ์ด๋‹ค. ์• ํ”Œ์€ ๊ฒŒ์œผ๋ฅธ ๊ฐœ๋ฐœ์‚ฌ, ๊ฐœ๋ฐœ์ž๋ฅผ ๋‹ค๋…์ด๋Š” ๊ณณ์ด ์•„๋‹Œ์ง€๋ผ ์„œ๋“œํŒŒํ‹ฐ ์ž…์žฅ์—์„œ๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐœ ๋งž์ถฐ ์ „ํ™˜ํ•˜๋Š” ์ˆ˜๋ฐ–์— ์—†์„ ๋“ฏ ํ•˜๋‹ค.


์ด๋ฏธ ์ด๋Ÿฐ ์‚ฌ์ง„์ด ํฅํ•˜๋Š” ์ค‘.(...)
C์™€ C++ ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•ด์ง„ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ํ™˜ํ˜ธํ•œ๊ฑด ๋ค

6. Cocoa ๊ธฐ๋ฐ˜ ์–ธ์–ด[ํŽธ์ง‘]

Swift๋‚˜ Objective-C๋‚˜ ๊ฒฐ๊ตญ Cocoa ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ์œ„์—์„œ ์ž‘์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋†“๊ณ  ์‚ดํŽด๋ณด๋ฉด ํด๋ž˜์Šค๋ช…, ๋ฉ”์†Œ๋“œ ๋ช…๋“ฑ ๊ทธ๋ฆฌ ํฐ ์ฐจ์ด๊ฐ€ ์—†์œผ๋ฉฐ ๋‹น์—ฐํžˆ ์•ฑ ๋ผ์ดํ”„์‚ฌ์ดํด ๋“ฑ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ ๋˜ํ•œ ๋™์ผํ•˜๋‹ค. ํด๋ž˜์Šค์˜ ์ด๋ฆ„์—์„œ NS(NeXTStep) ์ ‘๋‘์–ด๊ฐ€ ๋น ์ง€๋Š” ๋А๋‚Œ์€...

Objective-C๋ฅผ Swift๋กœ ํฌํŒ…์ž‘์—…์„ ํ• ๋•Œ ๋ณด๋ฉด ์ด๊ฑด ๋งˆ์น˜ ํ•œ๊ตญ์–ด๋ฅผ ์ผ๋ณธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ธฐ๋ถ„์œผ๋กœ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋ณธ์–ด๋ฅผ ๋ชจ๋ฅด๋ฉด?

7. ๊ด€๋ จ ๋ฌธ์„œ[ํŽธ์ง‘]

[1] ๊ทธ๋ž˜์„œ ํ‘œ์ค€ ํŒŒ์šด๋ฐ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ณด๋ฉด ๋„ฅ์ŠคํŠธ์˜ ํ”์ ์ด ๋งŽ์ด ๋‚จ์•„์žˆ๋‹ค. NSDictionary, NSString์˜ ์ ‘๋‘์–ด์ธ NS๋Š” ๋ชจ๋‘ ๋„ฅ์ŠคํŠธ์˜ ์šด์˜ ์ฒด์ œ์˜€๋˜ ๋„ฅ์ŠคํŠธ์Šคํ…์˜ ์ค€๋ง.
[2] Objective-C์™€ ์Šค๋ชฐํ† ํฌ๋Š” ์„œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ๋งค์šฐ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ๋ฒ•์ด ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๊ธฐ๋Š” ํž˜๋“ค๋‹ค.
[3] ์ดˆ์ฐฝ๊ธฐ Objective-C ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Objective-C ์ฝ”๋“œ๋ฅผ ์ผ๋‹จ ์ˆœ์ˆ˜ C ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•œ ํ›„, ์ด๊ฒƒ์„ ์ปดํŒŒ์ผํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฑ‰๋Š” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ์€ Objective-C ์ฝ”๋“œ์—์„œ ๋ฐ”๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์งํ–‰ํ•œ๋‹ค. C++ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฐœ์ „์‚ฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ”๋‹ค. ๋ฌผ๋ก , ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋ฐ”๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค C๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, C ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ ํ•˜๋Š” ์ชฝ์ด ํ›จ์”ฌ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—, Objective-C๋‚˜ C++๋ฟ ์•„๋‹ˆ๋ผ ์ƒ๋‹น์ˆ˜ ์–ธ์–ด๊ฐ€ ์ดˆ๊ธฐ์—๋Š” C ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ , ๋‚˜์ค‘์— ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ํผํฌ๋จผ์Šค๊ฐ€ ์ค‘์š”ํ•ด์ง€๋ฉด ๊ทธ ๋•Œ ๊ฐ€์„œ ์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์‹์œผ๋กœ ๊ฐœ์„ ๋œ๋‹ค.
[4] ์ง€๊ธˆ์€ ์‚ฌ๋ผ์ง„, ์• ํ”Œ์˜ ๊ณต์‹ ์–ธ์–ด ๋ช…์„ธ์„œ 'Objective-C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(The Objective-C Programming Language)'์—์„œ๋Š” 'A valid C code is also a valid Objective-C code'๋ผ๊ณ  ์„œ์ˆ ํ–ˆ์—ˆ๋‹ค. ์ฆ‰, Objective-C ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ(*.m) ๋‚ด์—์„œ๋Š” 'C ์ฝ”๋“œ == Objective-C ์ฝ”๋“œ'๋ผ๋Š” ๊ฒƒ.
[5] ์‚ฌ์‹ค ์ด ์ ์ด ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ์• ํ”Œ ์ชฝ OS๋“ค์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์ด๋ผ ์ฝ”๋“œ๋ฅผ ๊ตฌ๋™ํ•  ๋•Œ Dalvic Virtual Machine์ด๋ผ๋Š” JVM๊ธฐ๋ฐ˜์˜ ์ปค์Šคํ…€๋œ ๊ฐ€์ƒ๋จธ์‹ ์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ.
[6] OS X์€ libobjc.A.dylib, Windows๋Š” objc.dll.
[7] C++์˜ ์ฐฝ์‹œ์ž์ธ ๋น„์•„๋„ค ์ŠคํŠธ๋กœ์ŠคํŠธ๋ฃน(Bjarne stroustrup)๋„ C++์ด ์ง€๋‚˜์น˜๊ฒŒ ์ „๋ฌธ๊ฐ€ ์ „์šฉ ์–ธ์–ด๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ๋น„ํŒํ•˜์˜€๋‹ค. ํ˜„์žฌ C++ ํ‘œ์ค€์€ ISO ์œ„์›ํšŒ์—์„œ ์ •ํ•˜๋Š”๋ฐ, ์ด ์œ„์›ํšŒ ์ธ๋ฌผ๋“ค์ด ๊ฐœ๋ฐœ์ž๋ผ๊ธฐ๋ณด๋‹ค๋Š” (์ด๋ก ์— ์ถฉ์‹คํ•œ) ์ „๋ฌธ๊ฐ€์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค๊ณ .
[8] GCC, Clang, MSVC
[10] C์™€์˜ ํ˜ธํ™˜์„ฑ์ด ๋†’์€ ํŽธ์ด๊ธด ํ•˜์ง€๋งŒ, ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋Œ€๋ถ€๋ถ„์„ ํƒ‘์žฌํ•˜์—ฌ ๋ท”ํŽ˜์‹ ์–ธ์–ด๊ฐ€ ๋˜์—ˆ๋‹ค.
[11] ์ด ๋˜ํ•œ Objective-C์˜ ํŠน์ง•์œผ๋กœ, ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์„ค๊ณ„๋„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ํด๋ž˜์Šค ๊ทธ ์ž์ฒด๋„ ๊ฐ์ฒด๋กœ ์กด์žฌํ•˜๋ฉฐ, ๋‹น์—ฐํžˆ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ผ๋Š” ๊ฒƒ๋„ ์กด์žฌํ•œ๋‹ค. ์ด ํด๋ž˜์Šค ๊ฐ์ฒด๋Š” ๋˜ ๊ทธ๋“ค๋ผ๋ฆฌ์˜ ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์žˆ์–ด, ํด๋ž˜์Šค ๊ฐ์ฒด์˜ ์ˆ˜ํผ ํด๋ž˜์Šค๋Š” ๋ฉ”ํƒ€ ๊ฐ์ฒด๋ผ๋Š” ํ†ต๊ด„ ๊ฐ์ฒด๋กœ ์ด์–ด์ ธ์žˆ๋‹ค.
[12] ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, ๋ชจ๋“  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ(==๋ฉ”์‹œ์ง€ ์ „์†ก)์ด ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์ € objc_msgSend ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์น˜ํ™˜๋œ๋‹ค.
[13] ํ•˜์ง€๋งŒ, C++๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด CPU ํ•œ ์‚ฌ์ดํด(์ ํ”„ ๋ช…๋ น)๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. (๋ฌผ๋ก  ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ „๋‹ฌ ๋“ฑ์„ ํ•ฉ์น˜๋ฉด ๋ช‡ ์‚ฌ์ดํด ๋” ํ•„์š”ํ•˜๋‹ค.) ์ด๊ฒƒ์— ๋น„ํ•˜๋ฉด Objective-C์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์—๋Š” ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ์…ˆ. ํŠนํžˆ, ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์ดˆ๋‹น ์ˆ˜์ฒœ ๋ฒˆ ์ด์ƒ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ, ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ช…๋ น์–ด๊ฐ€ ํ•„์š”ํ•  ์ง€ ์ƒ๊ฐํ•ด๋ณด๋ผ. ์ด๊ฒƒ์ด ๋ฐ”๋กœ Objective-C๋ฅผ ๋น„ํŒํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ฃผ๋œ ์ฃผ์žฅ์ด๋‹ค. ์–ธ์–ด ์ž์ฒด๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ. ์‚ฌ์‹ค ํผํฌ๋จผ์Šค๋Š” ์ƒ์‚ฐ์„ฑ์— ๋ฐ˜๋น„๋ก€ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ณ , Objective-C์˜ ์ƒ์‚ฐ์„ฑ์ด C++๋ณด๋‹ค๋Š” ๋‚˜์€ ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์–ธ์–ด์˜ ํŠน์„ฑ์œผ๋กœ ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
[14] ์•„๊นŒ ์–ธ๊ธ‰ํ•œ ํด๋ž˜์Šค ๊ตฌ์กฐ์ฒด์—๋Š” cache๋ผ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ๋“ค์–ด์žˆ๋‹ค. objc_msgSend๋Š” ์ผ๋‹จ ์ด ์บ์‹œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋’ค์ง„ ํ›„ ๋‚˜์˜ค๋Š” ๊ฒŒ ์—†์œผ๋ฉด ๊ทธ ๋•Œ๋ถ€ํ„ฐ ์ € ๊ธด ๋ฉ”์„œ๋“œ ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค. ์ฐพ์œผ๋ฉด ๋ฉ”์„œ๋“œ ์ด๋ฆ„(์…€๋ ‰ํ„ฐ; Selector)์„ ํ‚ค ์‚ผ์•„ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ , ๋ชป ์ฐพ์œผ๋ฉด ์‹๋ณ„ ๋ถˆ๊ฐ€๋Šฅ ์…€๋ ‰ํ„ฐ(unrecognized selector) ์˜ˆ์™ธ๋ฅผ ํ„ฐํŠธ๋ฆฐ๋‹ค.
[15] ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” ๊ฒŒ์ž„์ด๋‹ค. ์‚ฌ์‹ค, C++๋กœ ์ž‘์„ฑํ•˜๋Š” ํŽธ์ด ํผํฌ๋จผ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํฌํŒ…์—๋„ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งฅ์—์„œ๋„ ๊ฒŒ์ž„์€ ๋Œ€๋ถ€๋ถ„ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งŒ๋“ ๋‹ค. ์•„๋‹ˆ, ์ฐจ๋ผ๋ฆฌ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ C++๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒŒ์ž„์„ ๋งฅ์œผ๋กœ ํฌํŠธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์‚ฌ์‹ค ๋” ๋งŽ๋‹ค.
[16] ๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”์ฝ”์•„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด ์ตœ์‹  ์‹œ์Šคํ…œ API์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ์ ˆ์ถฉ์•ˆ์œผ๋กœ ๋‚ด๋ถ€ ์—”์ง„์€ C++๋กœ ์ž‘์„ฑํ•˜๋˜ UI ๋ถ€๋ถ„๋งŒ Objective-C๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
[17] ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š”, ์ € ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฒ”์šฉ์„ฑ์„ ๊ณ ๋ คํ•˜๊ณ  ์ž‘์„ฑํ•˜์ง€ ์•Š์•„์„œ, ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์ปดํŒŒ์ผ์„ ์‹œ๋„ํ•˜๋ฉด ํŠน์ • ํ—ค๋” ํŒŒ์ผ์ด ์—†๋‹ค๊ณ  ๋ฐฑ์ด๋ฉด ๋ฐฑ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ € ํ—ค๋” ํŒŒ์ผ์€ ๋งฅ์—๋งŒ ์žˆ๋‹ค! ์ปดํŒŒ์ผ ๋ฏธ, ์ดํ”„ ์œ  ์บ”.
[18] ์œ ๋‹‰์Šค ํ”Œ๋žซํผ์˜ ร‰toilรฉ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฐ”๋กœ ์ด ๊ทธ๋ˆ„์Šคํ…์„ ์ ๊ทน์ ์œผ๋กœ ์ด์šฉํ•œ ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์ด๋‹ค.
[19] JetBrains์‚ฌ์˜ IDE๋“ค์ฒ˜๋Ÿผ ์ด๋Ÿฌํ•œ ์ธ์ž ๋ ˆ์ด๋ธ” ๊ธฐ๋Šฅ์„ ์ž์ฒด์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ์—๋””ํ„ฐ๋„ ์žˆ๋‹ค.
[20] ์ด๋Š” ๊ฐœ๋…์ ์œผ๋กœ ๋งค์šฐ ์–ด๋ ต๊ธฐ๋„ ํ•˜์ง€๋งŒ ์‚ฌ์‹ค ๊ต์žฌ ๋ฌธ์ œ๋„ ํฌ๋‹ค. ์–ธ์–ด์˜ ์ ์œ ์œจ์ด ๊ธ‰์†๋„๋กœ ๋†’์•„์ง€๊ธด ํ–ˆ์œผ๋‚˜, ๊ฐ€์‹œ๊ถŒ์— ๋“ค์–ด์˜จ์ง€๋Š” ์–ผ๋งˆ ์•ˆ ๋œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์“ธ ๋งŒํ•œ ๊ต์žฌ๊ฐ€ ๋งค์šฐ ๋ถ€์กฑํ•˜๋‹ค. BNR์ด ์ด์ชฝ์—์„œ ๋ฐ”์ด๋ธ” ์ทจ๊ธ‰์„ ๋ฐ›๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ๋„ ์‚ฌ์‹ค ํƒ€ ์–ธ์–ด์˜ ์ข‹์€ ๊ต์žฌ๋“ค์— ๋น„ํ•˜๋ฉด ์ž˜ ์งœ์—ฌ์ง„ ๊ต์žฌ๋ผ๊ณ  ๋ณด๊ธฐ๋Š” ํž˜๋“ค๋‹ค. ํ˜„์žฌ๋กœ์„  ๊ฒฝ์Ÿ์ž๋“ค์ด ๊ฑฐ์˜ ์—†๊ณ  ์žˆ๋Š”๊ฒƒ๋„ ์›Œ๋‚™ ํ—ˆ์ ‘ํ•ด์„œ ๋…๋ณด์ ์ธ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์„๋ฟ.
[21] ๋Œ€๋žต 8~9๋…„ ์ „ ์ฏค ์–˜๊ธฐ์ธ๋ฐ ์žก์Šค๊ฐ€ ์—ฌ์ „ํžˆ ์—ฌ๊ธฐ์— ๋’ค๋์ด ๋‚จ์•„์„œ GCC, Samba ๋“ฑ์„ ๋งฅ์—์„œ ๋‚ด์น ๋ ค๊ณ  ํ•œ๋‹ค๋Š” ์นด๋”๋ผ๊ฐ€ ์žˆ๋‹ค. ๊ตณ์ด ๊ทธ๋Ÿฐ๊ฒŒ ์•„๋‹ˆ๋”๋ผ๋„ GNU์ชฝ ๋ˆˆ์น˜๋ณด๋ฉฐ ๊ธฐ์ˆ  ๊ณต๊ฐœํ•˜๋Š”๊ฒŒ ์• ํ”Œ๊ฐ™์€ ๊ธฐ์—… ์ž…์žฅ์—์„œ ์„์—ฐ์น˜ ์•Š์€ ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค.
[22] LLVM ์ปดํŒŒ์ผ๋Ÿฌ ์…‹์€ Clang์ด๋ผ๋Š” ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ Objective-C ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด IR์ด๋ผ๊ณ  ํ•˜๋Š” LLVM๋งŒ์˜ ์ค‘๊ฐ„ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•œ ํ›„, ์ด๊ฒƒ์„ ๋‹ค์‹œ LLVM์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. ์ด LLVM/Clang์€ ์ปดํŒŒ์ผ๋Ÿฌ ์„ ํƒ ๋ฉ”๋‰ด์— 'Apple LLVM'์ด๋ผ๋Š” ํ˜•์‹์œผ๋กœ ์กด์žฌํ•˜๊ณ , LLVM+GCC ์กฐํ•ฉ์€ OS X ๋งค๋ฒ„๋ฆญ์Šค๋ถ€ํ„ฐ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด Clang์ด ์‹ ์ƒ ์ปดํŒŒ์ผ๋Ÿฌ๋ผ์„œ, ์ˆ˜์‹ญ๋…„๊ฐ„์˜ ์ตœ์ ํ™”๊ฐ€ ์Œ“์ธ GCC์— ๋น„ํ•˜๋ฉด ์•„์ง ์ƒ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ตœ์ ํ™” ์ˆ˜์ค€์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ. ๋Œ€์‹  ์ปดํŒŒ์ผ ์†๋„๋Š” 10~20% ๋น ๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค.
[23] ๊ตฌ๊ธ€์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ๋„๊ตฌ์ธ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๋Š” ๋งฅ์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์• ํ”Œ์˜ iOS ๊ฐœ๋ฐœ๋„๊ตฌ์ธ Xcode๋Š” ์œˆ๋„์šฐ์—์„œ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•œ, ์ต์ˆ™ํ•œ ์ƒํ™ฉ์ด๋‹ค.