본문 바로가기
프로그래밍 놀이터/iOS

[Effecitve Objective-C] #1 Objective-C 의 기원과 친숙해져라.

by 돼지왕 왕돼지 2017. 7. 16.
반응형

 [Effecitve Objective-C] #1 Objective-C 의 기원과 친숙해져라.


출처 : Effective Objective-C

c 확장, effective objective-c, Free, heap, malloc, messaging structure, objective-c runtime, objective-c 기원, reference count, Runtime, small talk, Stack, [Effecitve Objective-C] #1 Objective-C 의 기원과 친숙해져라., 개발자, 구조체, 구조체 타입, 기원, 동적 라이브러리, 동적 바인딩, 런타임, 메모리 관리 아키텍처, 메시지 받을 객체 타입, 메시징, 메시징 구조, 성능, 스몰 토크, 스택, 스택 할당, 시스템 프레임워크, 실행 코드 정의, 업데이트, 참조 세기, 추상화, 컴파일, 컴파일러, 프레임워크, 함수 호출, 힙


-

오브젝티브-C 는 매우 동적인 언어이다.

언어의 기원이 스몰토크(Small Talk) 이다.

대다수 언어가 컴파일 시간에 하는 일들을 오브젝티브-C 는 실행 시간에 한다.



-

함수 호출이 아닌 메시징 구조(Messaging Structure)를 사용한다.

Objective-C 는 메시징을 처음 사용한 스몰토크로부터 진화했다.

메시징과 함수 호출은 다음과 같이 차이점이 있다.


// 메시징

Object *obj = [Object new];

[obj performWith:param1 and:param2];


// 함수 호출

Object *obj = new Object;

obj->perform(param1, param2);



-

메시징 구조가 함수 호출과 다른 가장 큰 부분은 런타임이 실행할 코드를 정의한다는 것이다.

함수 호출은 컴파일러가 어떤 코드를 실행할지 정한다.



-

컴파일러는 메시지를 받을 객체 타입에 대해 신경 쓰지 않는다.

타입 또한 동적 바인딩이라는 프로세스를 이용해 실행 시간에 찾는다.



-

어려운 작업은 대부분 컴파일러가 아니라 Objective-C 런타임 컴포넌트가 수행한다.

근본적으로 런타임은 코드의 집합인데, 개발자의 코드 및 그 코드와 링크된 동적 라이브러리를 함께 잘 붙이는 일을 한다.

런타임이 업데이트되면 앱의 성능 향상의 이점을 동시에 누리게 된다.

컴파일 시간에 더 많은 것을 정하는 언어에서 이러한 성능 이점을 얻으려면 컴파일을 다시 해야 한다.



-

Objective-C 는 C 의 확장이다.

Objective-C 를 작성할 때 C 의 모든 기능을 쓸 수 있다.



-

특히 C 메모리 모델을 잘 이해하고 있으면 Objective-C 의 메모리 모델과 참조 세기의 동작 방식을 쉽게 이해할 수 있고,

Objective-C 객체를 나타내는 데 사용하는 포인터도 쉽게 이해할 수 있다.


NSString *someString = @“This is string”; // correct

NSString someString; // error



-

객체의 메모리는 항상 스택이 아닌 힙 공간에 할당된다.

Objective-C 객체는 스택에 할당되는 것이 허용되지 않는다.



-

힙 메모리 관리는 Objective-C 에서 추상화되었다.

개발자가 객체를 위한 메모리를 할당하거나 해제하려고 malloc 과 free 를 직접 사용할 필요가 없다.

Objective-C 런타임은 이것들을 참조 세기라는 메모리 관리 아키텍처를 이용해 추상화했다.



-

스택 공간을 사용할 것 같은 변수 정의를 볼 수 있다.

구조체 타입이 그러한데, 구조체 타입은 시스템 프레임워크 전반에 걸쳐 사용된다.

그 이유는 Objective-C 객체를 사용하는 부하가 성능에 영향을 주기 때문이다.

객체를 생성하는 것은 구조체에는 없는 힙 메모리 할당/해제 같은 부하를 수반한다.



-

기억할 점

     Objective-C 는 객체 지향 기능을 추가한 C 의 확장이다.

     Objective-C는 동적 바인딩을 사용하는 메시징 구조를 이용한다.

     동적 바인딩은 객체 타입이 실행 시간에 밝혀지는 것을 뜻한다.

     메시지를 받았을 때 동작할 코드를 컴파일러가 아닌 런타임이 결정한다.


     C 의 핵심 개념을 이해하고 있으면 Objective-C 를 효과적으로 작성하는 데 도움이 된다.

     특히 메모리 모델과 포인터를 잘 이해하고 있어야 한다.




반응형

댓글