본문 바로가기

iOS

NSObject

728x90
반응형
SMALL

NSObject란?

NSObject는 Objective-C에서 모든 클래스의 기본 클래스이며, Cocoa 및 Cocoa Touch 프레임워크에서 매우 중요한 역할을 합니다. Swift에서도 NSObject를 상속하여 Objective-C와 상호 작용하는 코드를 작성할 수 있습니다.

NSObject는 Objective-C의 id 타입과 비슷한 역할을 합니다.(NSObject는 클래스, id타입은 데이터 타입입니다.) 즉, NSObject는 모든 클래스의 인스턴스를 가리킬 수 있는 타입입니다. 이를 통해 Objective-C에서는 객체를 유연하게 다룰 수 있습니다.

또한, NSObject는 Objective-C에서 객체 생명주기 관리, 클래스 및 인스턴스 메소드 정의, 클래스 계층 구조 등의 많은 기능을 제공합니다. 이러한 기능들은 Cocoa 및 Cocoa Touch 프레임워크에서 매우 중요한 역할을 하며, Swift에서도 NSObject를 활용하여 이러한 기능을 사용할 수 있습니다.

모든 인스턴스를 가리킬 수 있는 만능인데, 타입 선언하지 않는 이유

  1. 타입 안정성(Type safety)의 손실: 모든 객체를 NSObject 타입으로 선언하면 컴파일러가 타입 체크를 수행할 수 없습니다. 따라서 런타임에 타입 관련 오류가 발생할 가능성이 높아집니다.
  2. 객체 지향 설계 원칙 위배: 객체 지향 프로그래밍에서는 상속과 다형성을 통해 코드 재사용성을 높입니다. 모든 객체를 NSObject로 선언하면 이러한 객체 지향 설계 원칙을 위배하게 됩니다.
  3. 메모리 낭비: NSObject 클래스는 모든 Objective-C 객체의 최상위 클래스이므로, NSObject 타입으로 모든 객체를 선언하면 메모리 사용량이 늘어납니다.

따라서 객체를 선언할 때는 최대한 구체적인 클래스를 사용하여 타입 안정성을 유지하고, 객체 지향 설계 원칙을 따르도록 노력해야 합니다.

 

** Cocoa , Cocoa Touch☕️ **

Cocoa와 Cocoa Touch는 각각 macOS와 iOS, iPadOS, watchOS, tvOS 등의 Apple 플랫폼에서 사용되는 프레임워크입니다.

- Cocoa는 macOS에서 사용되는 프레임워크로, Objective-C 언어와 함께 사용됩니다.
Cocoa 프레임워크는 AppKit을 포함하고 있으며, 사용자 인터페이스, 이벤트 처리, 파일 시스템 액세스, 네트워킹 등을 다루는 다양한 클래스와 메서드를 제공합니다.

- Cocoa Touch는 iOS, iPadOS, watchOS, tvOS에서 사용되는 프레임워크로, Objective-C 언어와 함께 사용됩니다.
Cocoa Touch 프레임워크는 UIKit, Foundation 등의 프레임워크를 포함하고 있으며, iOS 애플리케이션을 개발할 때 필요한 다양한 기능을 제공합니다. 예를 들어, 사용자 인터페이스, 마이크로폰 및 카메라 액세스, 네트워킹, 데이터 관리 등을 다루는 다양한 클래스와 메서드를 제공합니다.

 

따라서, Cocoa와 Cocoa Touch 프레임워크는 macOS와 iOS, iPadOS, watchOS, tvOS 애플리케이션 개발에 필요한 핵심 기능을 제공하며, Objective-C 및 Swift 언어와 함께 사용됩니다.

 

** id타입 **

id타입은 Objective-C에서 사용되는 데이터 타입 중 하나로, 모든 객체의 포인터를 나타냅니다. 다시 말해, id는 어떤 클래스의 객체를 가리킬 수 있으며, 컴파일러가 컴파일 시간에 이를 체크하지 않습니다. 이는 동적 타입 지정(dynamic type checking)을 지원하는 Objective-C의 특징 중 하나입니다.

id 타입을 사용하면 어떤 클래스의 객체를 가리키더라도 컴파일 에러가 발생하지 않습니다. 따라서 런타임에서 객체의 타입을 확인하여 적절한 메시지를 보낼 수 있습니다. 예를 들어, id 타입 변수를 사용하여 객체를 받아들인 후 해당 객체의 클래스 메서드를 호출하면, 런타임 시점에 해당 객체가 어떤 클래스의 인스턴스인지 확인하여 적절한 클래스 메서드를 호출합니다.

id 타입은 Objective-C에서 매우 유용한 타입 중 하나이며, 동적 타입 지정을 지원하기 때문에 Objective-C에서 객체 지향 프로그래밍을 구현하는 데에 많이 사용됩니다. 그러나 Swift와 같은 정적 타입 지정 언어에서는 id 타입 대신 제네릭 타입 등의 타입 시스템을 사용하여 컴파일 타임에 타입 안정성을 보장합니다.

 

 

728x90
반응형
LIST

'iOS' 카테고리의 다른 글

Static dispatch, Dynamic dispatch  (0) 2023.04.11
iOS APP 화면 구성  (0) 2023.04.11
ARC(Automatic Reference Counting)  (0) 2023.04.11
NSLog, CFShow의 차이  (0) 2023.04.11
가비지 컬렉터(Garbage Collector)  (0) 2023.04.11