본문 바로가기
프로그래밍 놀이터/iOS

[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #9 ~ #16

by 돼지왕 왕돼지 2017. 8. 19.
반응형

 [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #9 ~ #16


exact match, iskindofclass, isMemberOfClass, mimic owning, non owning, obj_msgsend, obj_msgSend 의 역할을 이해하라, opaque method, swizzle, [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #9 ~ #16, 내성, 내성 메서드, 내성 메소드, 네임스페이드, 동적 메서드, 디버깅, 디스패치 시스템, 라이브러리, 런타임, 리시버, 메모리 관리 속성, 메시지 포워딩, 메시지 포워딩을 이해하라., 버그, 불투명 메서드, 불투명 메서드(Opaque method)를 디버깅할 때 메서드 스위즐링을 사용하라, 비소유, 서드 파티 라이브러리, 선택자, 스위즐링, 싱글톤, 연관 객체, 연관 객체를 사용해 기존 클래스에 사용자 정의 데이터를 연관 지으라, 연관 데이터, 완전 포워딩, 재정의, 접두어, 접두어를 사용해 네임스페이스 충돌을 피하라, 지정 초기화 메서드, 지정 초기화 메서드를 만들라, 최소 소유, 클래스 객체, 클래스 객체가 무엇인지 이해하라, 클래스 접두어, 클래스 클러스터 패턴, 클래스 클러스터 패턴을 사용해 구현의 상세 내용을 숨겨라., 파라미터, 퍼블릭 추상 클래스, 포인터, 하위 클래스


#9 : 클래스 클러스터 패턴을 사용해 구현의 상세 내용을 숨겨라.


     클래스 클러스터 패턴은 간단한 퍼블릭 퍼사드 뒤편에 상세 구현을 숨길 때 사용할 수 있다.


     클래스 클러스터는 시스템 프레임워크에서 널리 사용된다.


     클래스 클러스터의 퍼블릭 추상 클래스의 하위 클래스를 만들 때는 항상 주의를 기울여야 한다.

     그리고 문서가 있으면 반드시 먼저 읽어봐야 한다.


     정리자 주 : 자바의 Interface 개념




#10 : 연관 객체를 사용해 기존 클래스에 사용자 정의 데이터를 연관 지으라


     연관 객체는 객체 두 개를 연결하는 방법을 제공한다.


     연관 객체의 메모리 관리 속성으로 최소 소유(mimic owning) 또는 비소유(nonowning) 관계를 정의할 수 있다.


     연관 객체는 다른 대안이 없을 때만 사용해야 한다.

     연관 객체는 찾기 어려운 버그를 쉽게 만들기 때문이다.


     정리자 주 : 안드로이드 View 의 Tag 개념




#11 : obj_msgSend 의 역할을 이해하라


     메시지는 리시버, 선택자, 파라미터들로 구성된다.

     메시지를 호출하는 것은 객체에 메서드를 호출하는 것과 동일하다.


     호출을 할 때 모든 메시지는 동적 메시지 디스패치 시스템을 통해 실행된다.

     이 시스템이 구현을 찾고 실행을 한다.




#12 : 메시지 포워딩을 이해하라.


     메시지 포워딩은 객체가 선택자에 응답할 수 없다는 사실을 알았을 때 진행되는 절차다.


     동적 메서드 해결은 런타임에 메서드를 클래스에 추가하고 바로 사용할 때 이용된다.


     객체는 해석할 수 없는 선택자를 다루기 위해 다른 객체를 선언할 수 있다.


     완전 포워딩은 이전 두 방법으로 선택자를 처리할 수 없을 때 호출된다.




#13 : 불투명 메서드(Opaque method)를 디버깅할 때 메서드 스위즐링을 사용하라


     클래스의 선택자에 대한 메서드 구현은 실행 시간에 추가되거나 바뀔 수 있다.


     스위즐링은 한 메서드 구현을 다른 것과 맞교환하는 것이다.

     보통은 원래 메서드 구현에 기능을 추가로 넣기 위해 사용된다.


     런타임이 메서드에 관여하는 것(즉 실행할 메서드 구현을 결정하는 행위)은 오직 디버깅할 때만 유용하다.

     사용할 수 있다고 꼭 사용해야 할 필요는 없다.


     정리자 주 : swizzle -> 혼합주, 칵테일, 술을 벌컥벌컥 마시다, 휘젓다




#14 : 클래스 객체가 무엇인지 이해하라


     클래스 계층은 Class 객체들로 구성되어 있다.

     각 Class 인스턴스는 타입을 정의하는 포인터를 가지고 있다.


     객체 타입을 컴파일 시간에 알 수 없을 때 내성을 꼭 사용해야 한다.


     클래스 객체를 직접 비교하는 것보다는 가능한 한 내성 메서드를 사용하라.

     객체가 메시지 포워딩을 구현했을 수 있기 때문이다.


     정리자 주 : 내성 메서드 -> isMemberOfClass: ( exact match ), isKindOfClass: ( 상속 match )




#15 : 접두어를 사용해 네임스페이스 충돌을 피하라


     회사와 앱 모두에 어울리는 클래스 접두어를 고르라.

     그리고 코드 전반에 걸쳐 사용하라.


     자신의 라이브러리에서 서드 파티 라이브러리를 사용한다면 그 라이브러리의 이름에 자신의 접두어를 붙여라.




#16 : 지정 초기화 메서드를 만들라


     여러분 클래스의 지정 초기화 메서드를 구현하고 문서화하라.

     다른 초기화 메서드들은 꼭 이 지정 메서드를 호출해야 한다.


     지정 초기화 메서드가 상위 클래스의 지정 초기화 메서드와 다르다면 상위 클래스의 지정 초기화 메서드를 꼭 재정의하라.


     하위 클래스에서 사용하지 않을 상위 클래스의 초기화 메서드에는 예외를 발생시키도록 재정의하라.




반응형

댓글