콘텐츠로 건너뛰기
Home » 오브젝티브C

오브젝티브C

Objective-C의 선언 프로퍼티 (Declared Property)에 대해

Objective-C의 객체 인스턴스에 어떠한 변수 값을 포함하고자 한다면 클래스 내에 인스턴스 변수를 선언하고, 여기에 값을 저장할 수 있다. (흔히 애플 문서등에서는 이런 인스턴스 변수를 ivar라 한다.)
기본적으로 객체의 내부에서 선언되는 인스턴스 변수는 private하며 객체의 외부에서는 내부의 인스턴스 변수값에 액세스하는 것이 차단된다. 따라서 객체의 외부에서 인스턴스 변수의 값을 읽거나 쓰기 위해서는 클래스가 해당 인스턴스를 읽게하거나, 쓰게 해주는 API를 제공해야 한다. 이렇게 객체가 자신의 내부 속성값에 대해 읽거나 쓰게 하기 위해 제공하는 메소드를 접근자(accessor) 메소드라고 한다.
더 보기 »Objective-C의 선언 프로퍼티 (Declared Property)에 대해

[Objective-C] 프로토콜

클래스는 서로 다르지만 A라는 똑같은 메소드를 하나씩 가지고 있는 어떤 객체들이 있다고 하자. 방금 A라는 메소드를 가지고 있다고 가정했기 때문에 이 객체들에게는 A라는 메시지를 보냈을 때 해당 메소드가 실행될 것이라는 게 보장된다. 프로토콜은 이처럼 특정한 메소드를 구현해서 갖추고 있겠다는 약속을 말한다.

어떤 객체가 특정한 프로토콜을 따르고 있다면, 그 프로토콜에서 선언된 메소드는 구현하고 있다는 의미이며, 해당 메소드를 호출할 수 있다. 이 때 객체의 클래스가 무엇인지는 관심의 대상이 아니다.

프로토콜은 Objective-C의 기능으로 “선언만 되고 구현되지 않은” 메소드를 말한다. 이 기능은 흔히 ‘다중 상속을 지원하지 못하는 Objective-C의 기능을 보완하기 위해’ 만들어졌다고 하는데, 틀려먹은 이야기이고… Swift에서는 특히 중요하고 광범위하게 사용되기 때문에 주목을 많이 받는데, Objective-C에서는 그렇게 중요하게 다뤄지지 않았던 거 같아서 (아니, 다루는 블로그가 별로 없었지) 정리하도록 하겠다.

어떤 객체의 클래스에 대해서 알고 있다면, 이 클래스가 제공하는 인터페이스를 통해서 우리는 객체가 지원하는 기능들을 사용할 수 있게 된다. 거꾸로 어떤 특정한 기능이 필요하다면 우리는 그러한 기능을 지원하는 클래스를 선택해서 사용해야 한다. 그런데 특정한 기능은 정해져 있지만, 어떤 클래스를 사용하게 될지 알 수 없다면 어떻게 할까?

더 보기 »[Objective-C] 프로토콜