Apple🍎/Objective-C

Objective-C: Small Talk과 Message 전달 패러다임

생각 깎는 아이 2025. 5. 21. 16:51

Objective-C의 스몰톡과 메시지 전달 패러다임

Objective-C는 Smalltalk에서 큰 영감을 받은 언어로, 객체지향 프로그래밍의 핵심 개념 중 하나인 '메시지 전달(message passing)' 패러다임을 채택했습니다. 이 패러다임은 Swift를 포함한 다른 많은 현대 언어들과는 다른 접근 방식을 취합니다.

메시지 전달 패러다임의 기본 개념

Objective-C에서는 객체에 메서드를 '호출(call)'하는 것이 아니라, 객체에 '메시지를 보낸다(send a message)'는 개념을 사용합니다. 이 차이점은 단순한 용어의 차이가 아닌 근본적인 실행 모델의 차이입니다.

일반적인 객체지향 언어에서는

object.method(parameters);  // 메서드 직접 호출

반면 Objective-C에서는

[object message:parameters];  // 객체에 메시지 전달

이 차이는 단순한 문법적 표현의 차이를 넘어, 실행 시간(runtime)에 어떻게 동작하는지에 있어 중요한 의미를 갖습니다.

메시지 전달의 동작 방식

Objective-C에서 메시지를 보내면, 런타임 시스템이 개입하여 다음과 같은 과정을 거칩니다.

  1. 수신자 객체의 클래스를 확인합니다.
  2. 해당 클래스와 그 상위 클래스들의 메서드 테이블에서 메시지에 해당하는 메서드를 찾습니다.
  3. 메서드가 발견되면 그것을 실행합니다.
  4. 메서드를 찾지 못하면, 객체에게 forwardInvocation:과 같은 메시지 전달 메커니즘을 통해 메시지를 처리할 기회를 제공합니다.

이러한 동적 바인딩(dynamic binding) 과정은 컴파일 시간이 아닌 런타임에 결정되기 때문에, 프로그램이 더 유연하게 동작할 수 있습니다.

메시지 전달의 장점

이 패러다임의 주요 장점은:

  1. 동적 타입 검사: 런타임에 메시지 처리 가능 여부를 결정합니다.
  2. 동적 메서드 해결: 실행 중에 어떤 메서드가 호출될지 결정됩니다.
  3. 메시지 전달(forwarding): 객체가 이해하지 못하는 메시지를 다른 객체에게 전달할 수 있습니다.
  4. 런타임 프로그래밍: 실행 중에 메서드를 추가하거나 교체할 수 있습니다.

이러한 특성들은 Objective-C가 Cocoa와 Cocoa Touch 프레임워크에서 강력한 기능을 제공할 수 있게 했습니다.