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에서 메시지를 보내면, 런타임 시스템이 개입하여 다음과 같은 과정을 거칩니다.
- 수신자 객체의 클래스를 확인합니다.
- 해당 클래스와 그 상위 클래스들의 메서드 테이블에서 메시지에 해당하는 메서드를 찾습니다.
- 메서드가 발견되면 그것을 실행합니다.
- 메서드를 찾지 못하면, 객체에게 forwardInvocation:과 같은 메시지 전달 메커니즘을 통해 메시지를 처리할 기회를 제공합니다.
이러한 동적 바인딩(dynamic binding) 과정은 컴파일 시간이 아닌 런타임에 결정되기 때문에, 프로그램이 더 유연하게 동작할 수 있습니다.
메시지 전달의 장점
이 패러다임의 주요 장점은:
- 동적 타입 검사: 런타임에 메시지 처리 가능 여부를 결정합니다.
- 동적 메서드 해결: 실행 중에 어떤 메서드가 호출될지 결정됩니다.
- 메시지 전달(forwarding): 객체가 이해하지 못하는 메시지를 다른 객체에게 전달할 수 있습니다.
- 런타임 프로그래밍: 실행 중에 메서드를 추가하거나 교체할 수 있습니다.
이러한 특성들은 Objective-C가 Cocoa와 Cocoa Touch 프레임워크에서 강력한 기능을 제공할 수 있게 했습니다.