본문 바로가기
[Effective Objective-C] #23 객체 간 통신에 델리게이트와 데이터 소스 프로토콜을 사용하라 [Effective Objective-C] #23 객체 간 통신에 델리게이트와 데이터 소스 프로토콜을 사용하라 출처 : Effective Objective-C -프로토콜은 자바의 인터페이스와 비슷한 기능이다.오브젝티브-C 는 다중 상속을 지원하지 않는다.그래서 프로토콜이 클래스가 구현해야 할 메서드 집합을 정의할 방법을 제공한다.프로토콜은 대부분 델리게이트 패턴을 구현하기 위해 사용한다. -프로토콜을 배워서 사용하면 코드에 사용 방법을 훌륭하게 문서화 할 수 있어 유지 보수하기 훨씬 쉬운 코드를 만들 수 있다. -카테고리 역시 오브젝티브-C 의 핵심 기능 중 하나다.카테고리는 상속을 사용해야 하는 다른 언어와는 달리 클래스를 상속받지 않고 메서드를 추가할 수 있게 하는 기능이다.이 기능은 오브젝티브-C .. 2017. 9. 3.
[Effective Objective-C] #22 NSCopying 프로토콜을 이해하라. [Effective Objective-C] #22 NSCopying 프로토콜을 이해하라. 출처 : Effective Objective-C -오브젝티브-C 에서는 copy 메서드를 이용하여 객체를 복사할 수 있다.자신이 만든 클래스가 복사될 수 있게 하려면 메서드가 하나뿐인 NSCopying 프로토콜을 구현하면 된다.- (id)copyWithZone:(NSZone*)zone -모든 앱이 단일 존(기본 존)을 가진다.그래서 이 메서드를 구현할 때 zone 파라미터는 무시해도 된다. -copy 메서드는 NSObject 내에서 구현되어 있다.그리고 기본 존을 이용해 copyWithZone: 을 호출한다.그냥 copy 를 재정의하고 싶겠지만 꼭 copyWithZone: 을 대신 구현해야 한다.- (id)copyW.. 2017. 9. 2.
[Effective Objective-C] #21 오브젝티브-C 에러 모델을 이해하라 [Effective Objective-C] #21 오브젝티브-C 에러 모델을 이해하라 출처 : Effective Objective-C -기본적으로 ARC ( Automatic Reference Counting) 가 예외(Exception)에 안전하지 않다.사실 이는 범위 끝에서 릴리스되어야 하는 객체가 예외가 발생하면 릴리스되지 않는다는 것을 의미한다.컴파일러 플래그( flag ) 를 켜면 예외 안전( exception-safe ) 모드를 생성할 수 있지만,그렇게 하면 예외가 발생하지 않는 상황에서도 동작하는 추가적인 코드가 만들어진다.이 컴파일러 플래그는 -fobj-arc-exceptions 다. -ARC 를 사용하지 않더라도 예외가 발생했을 때 메모리 누수를 막는 안전한 코드를 작성하는 것은 어렵다... 2017. 9. 1.
[Effective Objective-C] #20 프라이빗 메서드 이름에 접두어를 사용하라 [Effective Objective-C] #20 프라이빗 메서드 이름에 접두어를 사용하라 출처 : Effective Objective-C -프라이빗 메서드에 접두어를 붙이는 것이 좋다.퍼블릭 메서드와 프라이빗 메서드를 깔끔히 구분하여 디버깅할 때 도움이 된다. -프라이빗 메서드에 표시를 해두면 메서드 이름이나 시그너처를 바꿀 때 한 번 더 생각하게 된다.메서드가 퍼블릭이면 변경을 좀 더 신중하게 생각해야 한다.클래스의 퍼블릭 API 로 바꾸는 것이 적절하지 않을 수 있기 때문이다.퍼블릭으로 변경하면 해당 클래스 사용자는 그들의 코드를 해당 변경에 맞게 갱신해야 한다.그러나 메서드가 내부를 위한 것이면 외부에 공개된 퍼블릭 API 에 영향을 끼치지 않고 오직 해당 클래스의 코드만 변경하면 된다. -사용할.. 2017. 8. 31.
[Effective Objective-C] #19 명확하고 일관된 작명법을 사용하라 [Effective Objective-C] #19 명확하고 일관된 작명법을 사용하라 출처 : Effective Objective-C -오브젝티브-C 의 이름 짓는 법은 좀 더 장황한 이름을 사용하기 때문에 훨씬 명확하다.메서드와 변수 이름에 첫 문자를 소문자로 쓰는 카멜 표기법을 사용하고,클래스 이름은 항상 첫 문자가 대문자인 카멜 표기법을 사용한다. 이름에는 항상 두세 문자의 접두어를 사용한다. 메서드 이름 짓기 -긴 메서드 이름을 사용하는 것을 두려워하지 말라.메서드 이름이 메서드가 하는 일을 정확히 표현할 만큼만 길게 만들라.그러나 극도로 긴 이름을 쓰지는 말아야 한다.메서드 이름은 간결하고 정확해야 한다. -NSString 클래스는 좋은 작명 관례 지침을 다르는 최고의 예다. -다음 몇 가지 법칙.. 2017. 8. 30.
[Effective Objective-C] #18 가변 객체보다는 불변 객체를 사용하라 [Effective Objective-C] #18 가변 객체보다는 불변 객체를 사용하라 출처 : Effective Objective-C -프로퍼티를 기본 설정으로 두면 읽기 쓰기(read-write) 인데 이는 클래스를 가변적(mutable)로 만든다. -컬렉션이 가변 객체를 저장하고 집합(컬렉션)에 포함된 객체가 변형된다면, 집합의 내부 데이터 구조는 쉽게 불일치(inconsistent) 상태가 될 것이다.객체는 필요할 때만 가변적으로 만드는 것을 추천한다. -불변 객체를 만든다는 것은 프로퍼티를 외부에 읽기 전용으로 만든 다음 필요할 때만 데이터를 노출하는 것을 의미한다. -클래스를 불변으로 만들려면 모든 프로퍼티에 readonly 속성을 추가하면 된다.이제 무엇이든 프로퍼티 값을 변경하려 하면 컴파.. 2017. 8. 21.
[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] #16 지정 초기화 메서드를 만들라 [Effective Objective-C] #16 지정 초기화 메서드를 만들라 출처 : Effective Objective-C -객체가 제대로 동작하기 위해 필요한 정보를 객체에 주는 초기화 메서드를 지정 초기화 메서드(designated initializer) 라고 한다. -클래스의 인스턴스를 생성하는 방법이 한 가지 이상이 있는 클래스는 하나 이상의 초기화 메서드가 있을 것이다.초기화 메서드가 여러 개 있는 것도 괜찮지만, 모든 초기화 메서드가 호출하는 한 가지 지정 초기화 메서드가 있는 것이 더 좋다. -지정 초기화 메서드가 있다는 것은 나머지 초기화 메서드들이 이 지정 초기화 메서드를 호출함을 뜻한다. -지정 초기화 메서드는 객체 내부 데이터를 저장하는 유일한 곳이다.객체의 데이터를 저장하는 데이.. 2017. 8. 18.
반응형