THIS IS ELLIE

Objective-C id 타입 본문

개발/Objective-C

Objective-C id 타입

Ellie Kim 2020. 2. 20. 14:30

옵젝씨에서 id타입은 클래스 인스턴스에 대한 포인터입니다.

옵젝씨의 클래스의 인스턴스는 모두 id 타입입니다.

일반적으로 메서드나 클래스에서 파라미터나 리턴 값으로 많이 사용하곤 합니다.

 

하지만 id 타입 메서드를 호출하는 것엔 주의해야 하는 점이 있는데요.

예를 들어 MyClass를 정의해줍니다.

그리고 YourClass를 정의합니다.

그리고 안에 saySomething이라는 메서드를 정의해주고 구현해줍니다.

메인 함수에서 myClass인스턴스 my1 그리고 my2를 생성했습니다.

둘 다 myClass인스턴스입니다.

이제 my1의 saySomething을 불러보도록 하겠습니다.

뭔가 이상하죠.

 

네 saySomething은 MyClass에 정의된 메서드가 아니라, YourClass에 정의된 메서드입니다.

그래서 my1에서 saySomething을 호출하려니 오류가 발생합니다.

오류 내용은 No visible @interface for 'MyClass' declares the selector 'saySomething'

MyClass에 saySomething이 없습니다. 이런 내용.

 

하지만 my2에서 saySomething은 호출할 수 있습니다.

컴파일러는 my2가 MyClass 클래스의 인스턴스인지 확인할 방법이 없고 모르기 때문입니다.

이 코드를 실행하면 당연히 my2에 saySomething이 없어서 강제로 종료됩니다.

 

이 예제와 같이 id타입은 일반적인 클래스의 인스턴스처럼 메서드를 호출할 수 있습니다.

컴파일러는 id 타입의 실제 타입이 무엇인지까지는 판단하지 않으므로 호출 메서드가 정의되어 있는지 조사하지 않습니다.

그래서 id타입을 사용할 때는 실제로 그 메서드가 호출되는지에 주의해야 합니다.

반응형

'개발 > Objective-C' 카테고리의 다른 글

Objective-C 프로퍼티 속성  (0) 2020.03.26
KVO (Key Value Observing)  (0) 2020.02.24
조건문와 반복문  (0) 2020.02.12
오브젝티브씨 문자열 포맷팅  (0) 2020.01.22
오브젝티브씨 메소드  (0) 2020.01.15