1 분 소요

Root Class, NSObject

애플에서 제공하는 클래스를 보면 대부분 최상위 계층에서 NSObject 클래스를 상속하고 있는 것을 볼 수 있습니다. UIView 클래스를 보면 UIResponder를 상속하고 있고 UIResponder는 NSObject를 상속하고 있습니다. 이런 상속 관계의 최상위 클래스인 NSObject를 알아보았습니다.

애플에서는 다음과 같이 설명하고 있습니다.

NSObject는 대부분의 Objective-C 클래스 계층 구조의 루트 클래스로, 하위 클래스에서 런타임 시스템에 대한 기본 인터페이스와 Objective-C 객체로 작동하는 기능을 상속합니다.

다음은 OSX 구조를 이해하면서 배우는 Objective-C 책에서 나오는 NSObject 에 대한 구절입니다.

Objective-C는 객체의 동적 동작을 구현하는데, 실행 시에는 런타임 시스템의 도움을 받습니다. 런타임 시스템은 Objective-C용 운영체제 같은 것으로, 객체 생성, 해제에 따른 메모리 영역 관리와 송신된 메시지에 대응하는 메서드 검색 등을 합니다.

보통은 프로그램에서 런타임 시스템 기능을 직접 사용하지 않습니다. 이런 기본 기능은 루트 클래스인 NSObject에 있는 메서드로 제공됩니다. NSObject를 상속한 모든 클래스는 상속된 기능으로 런타임 시스템 기능을 고려하지 않아도 이용할 수 있습니다. 다시 말해 루트 클래스트는 런타임 시스템에 대한 인터페이스 역할이라고 할 수 있습니다.

루트 클래스가 제공하는 기능과 방법은 시스템 전체에 크게 영향을 미칩니다. 당연히 루트 클래스가 다르면 호환성 있는 프로그램을 개발할 수 없습니다.

Cocoa는 NeXT 사 OPENSTEP의 주요 API를 상속해서 발전시킨 것입니다. OPENSTEP은 이전에는 NeXTstep이라고 불렀습니다. NeXTstep 시대에 루트 클래스는 Object라는 클래스였지만 OPENSTEP에서는 NSObject로 변경됨과 동시에 클래스 설계 방침도 크게 새로워졌습니다.

루트 클래스는 다른 클래스에서 상속하지 않으며 그 아래 계층 구조의 모든 객체에 공통적인 인터페이스와 동작을 정의합니다 해당 계층의 모든 객체는 궁극적으로 루트 클래스에서 상속됩니다.

모든 Objective-C 클래스의 루트 클래스는 Foundation 프레임워크의 일부인 NSObject입니다. Cocoa 또는 Cocoa Touch 애플리케이션의 모든 객체는 궁극적으로 NSObject 로부터 상속됩니다. 이 클래스는 다른 클래스가 Objective-C 런타임과 상호작용하는 기본 액세스 포인트입니다. 또한 기본 객체 인터페이스를 선언하고 내부 검사, 메모리 관리 및 메서드 호출을 포함한 기본 객체 동작을 구현합니다. Cocoa 및 Cocoa Touch 객체는 루트 클래스인 NSObject 에서 상당 부분 객체로 동작하는 기능이 파생됩니다.

2021-03-25 at 06.43.00 AM-rootclass

NSObject 는 프로그래밍 인터페이스를 제공하는 NSObject 라는 이름의 프로토콜을 채택하고 있습니다. NSObject 프로토콜은 모든 루트 클래스에 필요한 기본 프로그래밍 인터페이스를 지정합니다.

참고 URL


Apple NSObject

Root class

OSX 구조를 이해하면서 배우는 Objective-C

카테고리:

업데이트:

댓글남기기