Objective-C 란?
C언어의 상위호환(?)
- 모든 것이 내부적으론 C언어로 작성됨.
- C의 자료형 및 특성들을
코코아
등에서 보다 쉽게 쓸 수 있도록 구현됨.
- 객체지향을 위한 C언어의 Wrapper라고 생각하면 됨.
- 객체간의 통신에
메세지
를 사용함.
메세지
- 객체간의 통신을 지원하기 위해
메세징
이라는 개념이 들어감.
- 이를 위해 런타임 라이브러리를 링크한다.
- 별도의 런타임 필요
- JVM과 같은 가상머신이 필요하진 않음.

함수 직접 호출 (X)

메세지
로 전달(O)런타임

C/C++
은 컴파일러에 의존하는 정적인 언어- 컴파일 단계에서 거의 모든 것을 해결 (맵핑, 에러탐지 등)
- 빌드 소요시간은 길지만, 빌드 후에는 빠름.
Obj-c
는 대부분을 런타임에 의존하는 동적인 언어- 컴파일러는 함수의 구현 주소가 어딘지 구체적으로 신경쓰진 않음.
- 메세지를 전달하는 코드와 실행 중에 어떻게 구현 주소를 찾아가는지에 대한 코드로만 변환.
⇒ 상황에 따라 메소드의 동작을 다르게 하는 등의 유연성 부여 가능.
C++과 비교 예시 (런타임 의존도 테스트)
1) C++ 순수 가상함수

c++
은순수 가상함수
라도 반드시 정의해야한다.
- 함수를 정의하지 않으면 빌드시
컴파일 에러
를 띄운다.
2) Obj-C 프로토콜

- Bye라는
프로토콜
을 채택하고 메소드를 정의하지 않았음에도 컴파일 에러는 나지 않는다.
- 심지어 객체에
nil
을 넣고 메소드를 호출하여도 빌드 단계에서는 에러가 나지 않는다.
- 이는 런타임에서 해당 메소드의 내용이 채워질 수 있는 여지가 있기 때문이다.
3) 결론
⇒
Obj-C
는 런타임 의존도가 높은 동적인 언어
이다.