본문 바로가기
[Effective Objective-C] #24 카테고리를 사용해 클래스를 관리 가능한 다수의 조각으로 나누라 [Effective Objective-C] #24 카테고리를 사용해 클래스를 관리 가능한 다수의 조각으로 나누라 출처 : Effective Objective-C -클래스의 수많은 메서드를 파일 하나에 구현하면 비대해지기 쉽다.오브젝티브-C 카테고리를 이용해 클래스를 매우 효과적인 논리 구성 단위들로 나눌 수 있다.이렇게 하면 개발뿐 아니라 디버깅에도 도움이 된다. -@interface EOCPerson : NSObject @property (nonatomic, copy, readonly) NSString *firstName;@property (nonatomic, copy, readonly) NSString* lastName;@property (nonatomic, strong, readonly) NSArr.. 2017. 9. 7.
[Effective Objective-C] #20 프라이빗 메서드 이름에 접두어를 사용하라 [Effective Objective-C] #20 프라이빗 메서드 이름에 접두어를 사용하라 출처 : Effective Objective-C -프라이빗 메서드에 접두어를 붙이는 것이 좋다.퍼블릭 메서드와 프라이빗 메서드를 깔끔히 구분하여 디버깅할 때 도움이 된다. -프라이빗 메서드에 표시를 해두면 메서드 이름이나 시그너처를 바꿀 때 한 번 더 생각하게 된다.메서드가 퍼블릭이면 변경을 좀 더 신중하게 생각해야 한다.클래스의 퍼블릭 API 로 바꾸는 것이 적절하지 않을 수 있기 때문이다.퍼블릭으로 변경하면 해당 클래스 사용자는 그들의 코드를 해당 변경에 맞게 갱신해야 한다.그러나 메서드가 내부를 위한 것이면 외부에 공개된 퍼블릭 API 에 영향을 끼치지 않고 오직 해당 클래스의 코드만 변경하면 된다. -사용할.. 2017. 8. 31.
[Effective Objective-C] #17 description 메서드를 구현하라 [Effective Objective-C] #17 description 메서드를 구현하라 출처 : Effective Objective-C -디버깅할 때 객체의 내용을 출력하면 유용할 때가 있다.내용을 출력하는 방법 중 하나는 객체의 모든 프로퍼티를 출력하는 로깅 코드를 작성하는 것이지만, 다음과 같이 하는 것이 더 일반적인 방법이다.NSLog(@“object = %@“, object); 문자열이 로그로 기록될 때 object 는 description 메시지를 받을 것이다. -여러분이 만든 클래스에서 NSObject 기본 구현의 description 이 호출될 것이다.이 메서드는 NSObject 프로토콜에 정의되어 있지만, NSObject 클래스가 구현한다.많은 메서드가 NSObject 프로토콜에 속해있는.. 2017. 8. 20.
[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #9 ~ #16 [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #9 ~ #16 #9 : 클래스 클러스터 패턴을 사용해 구현의 상세 내용을 숨겨라. 클래스 클러스터 패턴은 간단한 퍼블릭 퍼사드 뒤편에 상세 구현을 숨길 때 사용할 수 있다. 클래스 클러스터는 시스템 프레임워크에서 널리 사용된다. 클래스 클러스터의 퍼블릭 추상 클래스의 하위 클래스를 만들 때는 항상 주의를 기울여야 한다. 그리고 문서가 있으면 반드시 먼저 읽어봐야 한다. 정리자 주 : 자바의 Interface 개념 #10 : 연관 객체를 사용해 기존 클래스에 사용자 정의 데이터를 연관 지으라 연관 객체는 객체 두 개를 연결하는 방법을 제공한다. 연관 객체의 메모리 관리 속성으로 최소 소.. 2017. 8. 19.
[Effective Objective-C] #15 접두어를 사용해 네임스페이스 충돌을 피하라 [Effective Objective-C] #15 접두어를 사용해 네임스페이스 충돌을 피하라 출처 : Effective Objective-C -오브젝티브-C 는 내장(built-in) 네임스페이스 기능이 없다.그렇기 때문에 일어날 가능성이 있는 충돌을 피하는 방법을 사용하지 않으면 이름은 쉽게 충돌한다.앱에서 이름이 충돌하면 중복 심벌 에러(duplicate symbol error)가 발생하여 링크(link)가 되지 않는다. -링크가 안 되는 것보다 더 좋지 않은 상황은 중복된 것을 포함한 라이브러리 중 하나가 실행 시간에 로딩되었을 때다.이 경우 동적 로더(dynamic loader)는 중복 심벌 에러와 마주치게 될 것이다.그리고 아마도 전체 앱이 다운될 것이다. -이 문제를 피하는 한 가지 방법은 간.. 2017. 8. 17.
[Effective Objective-C] #13 불투명 메서드를 디버깅할 때 메서드 스위즐링을 사용하라 [Effective Objective-C] #13 불투명 메서드를 디버깅할 때 메서드 스위즐링을 사용하라 출처 : Effective Objective-C -Opaque Method ( 불투명 메소드 ) : 소스 코드를 볼 수 없는 메소드 -동적 바인딩은 호출될 메서드가 실행 시간에 바뀔 수 있다는 것을 뜻한다.이 능력은 굉장한 유연성을 제공하는데, 소스 코드가 없는 클래스 ( 즉 바이너리 파일만 있는 경우 ) 라도 하위 클래스를 만들거나 메서드를 재정의하지 않고도 기능을 변경할 수 있다.그래서 하위 클래스에서 메서드를 재정의하는 방법은 하위 클래스의 인스턴스만 변경한 기능을 사용할 수 있는 것에 반해, 이 방법은 해당 클래스(기본 클래스와 모든 하위 클래스)의 모든 인스턴스에서 새로운 기능을 사용할 수 .. 2017. 8. 15.
[Effective Objective-C] #11 objc_msgSend 의 역할을 이해하라 [Effective Objective-C] #11 objc_msgSend 의 역할을 이해하라 출처 : Effective Objective-C -Objective-C 에서 많이 하는 일 중 하나는 객체의 메서드를 호출하는 것이다.Objective-C 용어로는 메시지를 전달한다고 한다.메시지는 이름 또는 선택자(selector)가 있다.또 인자를 받고 값을 반환할 수도 있다. -Objective-C 가 C 를 포함하기 때문에 C 에서 사용하는 정적 바인딩과 동적 바인드 함수 호출을 이해하는 것부터 시작해야 한다.정적 바인딩은 호출되는 함수가 컴파일 시간에 정해지는 것을 의미한다.동적 바인딩은 다음과 같은 경우를 이야기한다.호출될 함수를 실행 시간 전에는 알 수 없기 떄문이다. void printHello().. 2017. 8. 13.
[Effective Objective-C] #10 연관 객체를 사용해 기존 클래스에 사용자 정의 데이터를 연관 지으라 [Effective Objective-C] #10 연관 객체를 사용해 기존 클래스에 사용자 정의 데이터를 연관 지으라 출처 : Effective Objective-C -객체에 추가 정보를 연관 지을 필요가 가끔 있다.보통 그 객체의 클래스의 하위 클래스를 만들고 그 하위 클래스에 추가 정보를 더할 수 있지만 항상 가능하진 않다.클래스의 인스턴스가 여러분이 직접 생성하는 것이 아닌 특정 방법으로 생성될 수 있고, 이때는 해당 클래스 대신 여러분이 만든 하위 클래스가 생성되도록 바꿀 수 없기 때문이다.이 떄문에 손쉽게 사용할 수 있는 오브젝티브-C 의 강력한 기능인 연관 객체( Associated Objects ) 가 생겨났다. -객체는 식별 키를 사용해 다른 객체를 연관 지을 수 있다.또한 연관되는 객체를.. 2017. 8. 12.
[Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라. [Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라. 출처 : Effective Objective-C -인스턴스 변수를 읽을 때는 직접 접근하고, 쓸 때는 프로퍼티를 사용하는 방법을 강력하게 추천한다. -인스턴스 변수에 직접 접근하는 방법이 확실히 빠르다.이 방법은 Objective-C 의 메서드 호출(dispatch)를 사용하지 않는다.컴파일러는 객체의 인스턴스 변수가 저장된 메모리에 직접 접근하는 코드를 만들어 낼 것이다. -직접 접근하는 방법은 세터에 정의된 메모리 관리 시멘틱을 무시한다. -인스턴스 변수에 직접 접근하면 키-값 관찰(key-value observing:KVO) 알림이 발생하지 않을 것이다.이는 기대하는 객체의 동작 방식에 따라 문제가.. 2017. 7. 28.
반응형