Objective-C란?

Tags
obj-c

Objective-C 란?

C언어의 상위호환(?)

  • 모든 것이 내부적으론 C언어로 작성됨.
  • C의 자료형 및 특성들을 코코아 등에서 보다 쉽게 쓸 수 있도록 구현됨.
  • 객체지향을 위한 C언어의 Wrapper라고 생각하면 됨.
    • 객체간의 통신에 메세지 를 사용함.

메세지

  • 객체간의 통신을 지원하기 위해 메세징이라는 개념이 들어감.
  • 이를 위해 런타임 라이브러리를 링크한다.
  • 별도의 런타임 필요
    • JVM과 같은 가상머신이 필요하진 않음.
notion image
함수 직접 호출 (X)
notion image
메세지로 전달(O)
 

런타임

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

C++과 비교 예시 (런타임 의존도 테스트)

1) C++ 순수 가상함수

notion image
  • c++순수 가상함수라도 반드시 정의해야한다.
  • 함수를 정의하지 않으면 빌드시 컴파일 에러를 띄운다.
 

2) Obj-C 프로토콜

notion image
  • Bye라는 프로토콜을 채택하고 메소드를 정의하지 않았음에도 컴파일 에러는 나지 않는다.
  • 심지어 객체에 nil을 넣고 메소드를 호출하여도 빌드 단계에서는 에러가 나지 않는다.
  • 이는 런타임에서 해당 메소드의 내용이 채워질 수 있는 여지가 있기 때문이다.

3) 결론

Obj-C는 런타임 의존도가 높은 동적인 언어이다.