본문 바로가기
[Objective-C] 카테고리 [Objective-C] 카테고리 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 10. Notice : 정리자(돼지왕 왕돼지)가 remind 하고 싶은 내용이나 모르는 내용 기반으로 정리하는 것이기 때문에 구체적인 내용은 책을 사서 보시기를 권장드립니다. 10.1. 카테고리 선언과 정의 * 10.1.1. 카테고리란 -카테고리는 클래스와 마찬가지로 인터페이스로 선언하고, 구현 부분에 그 정의를 기술한다.단, 인스턴스 변수를 선언할 수는 없으며, 카테고리는 메서드만 포함한다.메서드는 인스턴스 메서드와 클래스 메서드 양쪽 다 가능하다. -카테고리 구현 부분에도 인스턴스 변수를 선언할 수 없다.메서드 정의에서는 그 클래스의 다른 메서드를 호출하거나 인스턴스 변수에 자유롭게 접근할 수 .. 2018. 1. 2.
[Objective-C] NSObject 클래스와 런타임 시스템 [Objective-C] NSObject 클래스와 런타임 시스템 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 8. Notice : 정리자(돼지왕 왕돼지)가 remind 하고 싶은 내용이나 모르는 내용 기반으로 정리하는 것이기 때문에 구체적인 내용은 책을 사서 보시기를 권장드립니다. 8.1. NSObject 클래스 * 8.1.1. 루트 클래스의 역할 -런타임 시스템은 Objective-C 용 운영체제 같은 것으로, 객체 생성, 해제에 따른 메모리 영역 관리와 송신된 메시지에 대응하는 메서드 검색 등을 한다. -보통은 프로그램에서 런타임 시스템 기능을 직접 사용하지 않는다.이런 기본 기능은 루트 클래스인 NSObject 에 있는 메서드로 제공된다.다시 말해 루트 클래스는 런타임 .. 2017. 12. 29.
[Objective-C] 객체 기반 소프트웨어 작성 [Objective-C] 객체 기반 소프트웨어 작성 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 1. Notice : 정리자(돼지왕 왕돼지)가 remind 하고 싶은 내용이나 모르는 내용 기반으로 정리하는 것이기 때문에 구체적인 내용은 책을 사서 보시기를 권장드립니다. 1.1 객체 개념 * 1.1.1. 소프트웨어를 기능 중심으로 설계 했을 때의 문제점 -기능은 상당히 쉽게 바뀔 수 있다.따라서 기능 중심으로 설계한 소프트웨어는 변경에 취약해서 유지 보수하는 데 비용이 많이 든다. * 1.1.2. 객체로 모델화 -객체를 사용해 작성한 모델은 사람이 생각하는 개념 사이의 관계를 반영한 것이므로 기능을 변경하더라도 큰 영향을 받지는 않는다. * 1.1.3. 메세지로 통신 -메시지는.. 2017. 12. 23.
[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #25 ~ #32 [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #25 ~ #32 출처 : Effective Objective-C #25 : 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙이라 자신이 소유하지 않은 클래스에 카테고리를 추가할 때는 항상 카테고리 이름에 접두어를 붙이라. 자신이 소유하지 않은 클래스에 카테고리를 추가할 때 카테고리의 메서드에도 접두어를 항상 붙이라. #26 : 카테고리에는 프로퍼티를 사용하지 말라 데이터를 캡슐화하는 모든 프로퍼티 선언은 메인 인터페이스 파일에서 하라. 클래스 확장 카테고리를 제외하고 카테고리 내에 프로퍼티를 선언하기보다는 접근자 메서드를 사용하라. #27 : 클래스 확장 카테고리를 이용해 상세.. 2017. 9. 26.
[Effective Objective-C] #27 클래스 확장 카테고리를 이용해 상세한 구현을 숨기라. [Effective Objective-C] #27 클래스 확장 카테고리를 이용해 상세한 구현을 숨기라. 출처 : Effective Objective-C -클래스가 외부로 공개한 메서드와 인스턴스 변수 이외의 메서드와 변수를 갖길 원할 때가 많이 있다.일단 이런 인스턴스 변수와 메서드들을 외부로 공개하고 문서에 내부용(private)이기 때문에 사용하면 안 된다고 명시할 수 있다.무엇보다도 오브젝티브-C 의 어떠한 메서드나 인스턴스 변수도 실제로는 프라이빗이 아니다.이는 동적 메시징 시스템이 동작하는 방식 때문이다.그렇다 하더라도 꼭 공개할 필요가 있는 것만 공개하는 것이 좋은 사용 방법이다. -클래스 확장 카테고리는 일반적인 카테고리와는 다르게 확장(continuation)이라는 클래스의 구현 파일에 정.. 2017. 9. 11.
[Effective Objective-C] #26 카테고리에는 프로퍼티를 사용하지 말라. [Effective Objective-C] #26 카테고리에는 프로퍼티를 사용하지 말라. 출처 : Effective Objective-C -기술적으로 카테고리에 프로퍼티를 선언하는 것이 가능할지라도 되도록이면 하지 말아야 한다.그 이유는 클래스 확장 카테고리를 제외하고는 카테고리가 클래스에 인스턴스 변수를 추가하는 것이 불가능하기 때문이다.그렇기 때문에 카테고리가 프로퍼티에 해당하는 인스턴스 변수를 합성(synthesize) 할 수도 없다. -카테고리에 있는 인스턴스 변수는 합성될 수 없기 때문에 프로퍼티를 위한 접근자 메서드를 카테고리에 구현해야 하고,그렇게 하지 않으면 접근자 메서드를 @dynamic 으로 선언해야 한다.@dynamic 으로 메서드를 선언하는 것의 의미는 이 메서드를 실행 시간에는 사.. 2017. 9. 10.
[Effective Objective-C] #12 메시지 포워딩을 이해하라 [Effective Objective-C] #12 메시지 포워딩을 이해하라 출처 : Effective Objective-C -해석할 수 없는 메시지를 클래스에 보내는 것은 컴파일 시간 에러가 아니다.컴파일러는 클래스에 없는 메시지를 보내는 코드를 컴파일할 때 에러를 일으키지 않는다.메서드가 런타임에 추가될 수 있기 때문이다.그래서 컴파일러가 메서드 구현이 존재하는지 여부를 알 수 있는 방법이 없다. -객체가 메시지를 받았을 때 그 메시지를 해석하지 못하면 메시지 포워드 단계로 넘어간다.메시지 포워드는 해석할 수 없는 메시지를 처리하는 방법을 개발자가 객체에 알려주는 절차다. -콘솔에서 다음과 같은 메시지가 나오는 이유는 객체가 해석하지 못하는 메시지를 객체에 보냈기 때문이다.-[__NSCFNumber l.. 2017. 8. 14.
[Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라. [Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라. 출처 : Effective Objective-C -인스턴스 변수를 읽을 때는 직접 접근하고, 쓸 때는 프로퍼티를 사용하는 방법을 강력하게 추천한다. -인스턴스 변수에 직접 접근하는 방법이 확실히 빠르다.이 방법은 Objective-C 의 메서드 호출(dispatch)를 사용하지 않는다.컴파일러는 객체의 인스턴스 변수가 저장된 메모리에 직접 접근하는 코드를 만들어 낼 것이다. -직접 접근하는 방법은 세터에 정의된 메모리 관리 시멘틱을 무시한다. -인스턴스 변수에 직접 접근하면 키-값 관찰(key-value observing:KVO) 알림이 발생하지 않을 것이다.이는 기대하는 객체의 동작 방식에 따라 문제가.. 2017. 7. 28.
[Effective Objective-C] #6 프로퍼티를 이해하라 [Effective Objective-C] #6 프로퍼티를 이해하라 출처 : Effective Objective-C -프로퍼티는 객체가 포함한 데이터를 캡슐화하는 방법을 제공하는 Objective-C 의 기능이다. -인스턴스 변수는 항상 접근자 메서드(accessor method)를 통해 접근한다.Objective-C 2.0 배포판에 프로퍼티라는 기능으로 포함되었다.이 기능으로 개발자는 접근자 메서드들을 자동으로 생성하라고 컴파일러에 알려줄 수 있다.프로퍼티는 점(.) 문법이라는 새로운 방법을 제공한다.점 문법 덕분에 클래스에 저장된 데이터에 접근하는 방법이 좀 덜 장황해졌다. -@interface EOCPerson : NSObject{@public NSString *_firstName; NSString.. 2017. 7. 27.
반응형