๋ถ๋ฅ:ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
TIOBE ์ ์ ์ฌํด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด | ||||
2010๋
Python | โ | 2011๋
Objective-C | โ | 2012๋
Objective-C |
2011๋
Objective-C | โ | 2012๋
Objective-C | โ | 2013๋
Transact-SQL |
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]
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] ์ด๊ฒ ๋ง๊ณ ๋, ๊ฐ์ธ์ด ์ฝ์ฝ์ ํ๋ ์์ํฌ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํ๋ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ด๊ธฐ๋ ํ๋ค.
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 ์์๋
์ฒ๋ผ ๋๊ธฐ ๋๋ฌธ์, ๋ฉ์์งํ๋ ์ค๋ง ๋ณด๊ณ ์๋ ๊ทธ๊ฒ ์ด๋ค ๋ช ๋ น์ธ์ง ๋๋ต์ ์ธ ํ์ ์ด ๊ฐ๋ฅํ๋ค. ๋ํ, ์ ๋ ์ด๋ธ ์์ฒด๊ฐ ๋ฉ์๋๋ช ์ ํฌํจ๋๊ธฐ ๋๋ฌธ์ Width ์ Height ๋์ ๋๋ค๋ฅธ (x, y) ์ขํ๋ฅผ ๋ฐ์์ ์ฌ๊ฐํ์ ๊ทธ๋ฆด ๊ฒฝ์ฐ์๋ ๋ค์ด๋ฐ ์ปจํ๋ฆญํธ ์์ด
์์ด๋ฌ๋ํ๊ฒ๋, 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], ์ผ๋จ ๋งฅ ์ปดํจํฐ๋ฅผ ๊ตฌ์ ํ๋๋ก ํ์.๊ทธ๋ฆฌ๊ณ ์ฌ์ฌ ์ ํ๋น ๊ฐ ๋์ด๊ฐ๊ฒ ์ง.
์ด์ฐฝ๊ธฐ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค ๋, ๋ฅ์คํธ์์ 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 ์ง์์ด ์ง๊ธ ์ด๋ค ๊ผด์ธ์ง๋ฅผ ์๊ฐํ๋ฉด ๋ปํ ์ผ์ด๋ค. ์ ํ์ ๊ฒ์ผ๋ฅธ ๊ฐ๋ฐ์ฌ, ๊ฐ๋ฐ์๋ฅผ ๋ค๋ ์ด๋ ๊ณณ์ด ์๋์ง๋ผ ์๋ํํฐ ์ ์ฅ์์๋ ๋น ๋ฅด๊ฒ ๋ฐ ๋ง์ถฐ ์ ํํ๋ ์๋ฐ์ ์์ ๋ฏ ํ๋ค.
์ด๋ฏธ ์ด๋ฐ ์ฌ์ง์ด ํฅํ๋ ์ค.(...)
6. Cocoa ๊ธฐ๋ฐ ์ธ์ด[ํธ์ง]
Swift๋ Objective-C๋ ๊ฒฐ๊ตญ Cocoa ํ๋ ์์ํฌ ๊ธฐ๋ฐ ์์์ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์์ค์ฝ๋๋ฅผ ๋๊ณ ์ดํด๋ณด๋ฉด ํด๋์ค๋ช
, ๋ฉ์๋ ๋ช
๋ฑ ๊ทธ๋ฆฌ ํฐ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ ๋น์ฐํ ์ฑ ๋ผ์ดํ์ฌ์ดํด ๋ฑ์ ๋ํ ๋ฉ์๋ ๋ํ ๋์ผํ๋ค. ํด๋์ค์ ์ด๋ฆ์์ NS(NeXTStep) ์ ๋์ด๊ฐ ๋น ์ง๋ ๋๋์...
Objective-C๋ฅผ Swift๋ก ํฌํ ์์ ์ ํ ๋ ๋ณด๋ฉด ์ด๊ฑด ๋ง์น ํ๊ตญ์ด๋ฅผ ์ผ๋ณธ์ด๋ก ๋ฒ์ญํ๋ ๊ธฐ๋ถ์ผ๋ก ์์ ์ด ๊ฐ๋ฅํ๋ค.์ผ๋ณธ์ด๋ฅผ ๋ชจ๋ฅด๋ฉด?
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๊ธฐ๋ฐ์ ์ปค์คํ
๋ ๊ฐ์๋จธ์ ์ ์ฐ๊ธฐ ๋๋ฌธ.
[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๋ ์๋์ฐ์์ ์คํ์ด ๋ถ๊ฐ๋ฅํ, ์ต์ํ ์ํฉ์ด๋ค.