본문 바로가기
[Effective Objective-C] #14 클래스 객체가 무엇인지 이해하라 [Effective Objective-C] #14 클래스 객체가 무엇인지 이해하라 출처 : Effective Objective-C -객체 타입은 컴파일 시간에 결정되지 않고 실행 시간에 찾는다. -컴파일러는 리시버가 이해할 수 없다고 생각되는 메시지를 보내는 것에 경고를 보낼 수 있다.반대로 id 타입의 객체는 모든 메시지에 응답할 수 있다고 여긴다. -실행 시간에 객체 타입을 알아내는 것을 내성(introspection)이라 하고, 이는 Foundation 프레임워크의 NSObject 의 프로토콜로 녹아 들어간 강렬하고 유용한 기능이다.이 프로토콜은 모든 공통 최상위 클래스(NSObject 와 NSProxy) 를 상속받는 모든 객체가 따르는 프로토콜이다.객체의 클래스를 직접 비교하는 것보다는 이런 메서.. 2017. 8. 16.
[Effective Objective-C] #13 불투명 메서드를 디버깅할 때 메서드 스위즐링을 사용하라 [Effective Objective-C] #13 불투명 메서드를 디버깅할 때 메서드 스위즐링을 사용하라 출처 : Effective Objective-C -Opaque Method ( 불투명 메소드 ) : 소스 코드를 볼 수 없는 메소드 -동적 바인딩은 호출될 메서드가 실행 시간에 바뀔 수 있다는 것을 뜻한다.이 능력은 굉장한 유연성을 제공하는데, 소스 코드가 없는 클래스 ( 즉 바이너리 파일만 있는 경우 ) 라도 하위 클래스를 만들거나 메서드를 재정의하지 않고도 기능을 변경할 수 있다.그래서 하위 클래스에서 메서드를 재정의하는 방법은 하위 클래스의 인스턴스만 변경한 기능을 사용할 수 있는 것에 반해, 이 방법은 해당 클래스(기본 클래스와 모든 하위 클래스)의 모든 인스턴스에서 새로운 기능을 사용할 수 .. 2017. 8. 15.
[Effective Objective-C] #12 메시지 포워딩을 이해하라 [Effective Objective-C] #12 메시지 포워딩을 이해하라 출처 : Effective Objective-C -해석할 수 없는 메시지를 클래스에 보내는 것은 컴파일 시간 에러가 아니다.컴파일러는 클래스에 없는 메시지를 보내는 코드를 컴파일할 때 에러를 일으키지 않는다.메서드가 런타임에 추가될 수 있기 때문이다.그래서 컴파일러가 메서드 구현이 존재하는지 여부를 알 수 있는 방법이 없다. -객체가 메시지를 받았을 때 그 메시지를 해석하지 못하면 메시지 포워드 단계로 넘어간다.메시지 포워드는 해석할 수 없는 메시지를 처리하는 방법을 개발자가 객체에 알려주는 절차다. -콘솔에서 다음과 같은 메시지가 나오는 이유는 객체가 해석하지 못하는 메시지를 객체에 보냈기 때문이다.-[__NSCFNumber l.. 2017. 8. 14.
[Kotlin Tutorial] 클래스, objects, 그리고 인터페이스 #2 [Kotlin Tutorial] 클래스, objects, 그리고 인터페이스 #2 참조 : Kotlin in Action 4.3. Compiler-generated methods: Data classes and Class delegation 4.3.1. Universal object methods -Java 에서 == 는 primitive 나 object 의 reference 를 비교하는 것.Kotlin 에서는 == 가 기본비교이다. equals 를 호출해서 비교한다.그럼 Java 에서의 == 는? === 로 대체된다. 4.3.2. Data classes: autogenerated implementations of universal methods -data class Client(val name: Stri.. 2017. 8. 14.
[Android] 새로운 Dex Compiler 가 나온다네용 -이 글은 D8 이 출시되기 전에 쓰여진 글이라 현재는 deprecated doc 이라고 볼 수 있겠다.D8 에 대한 이야기는 아래 링크를 참조하시길..[android] D8 이 뭐야? -Android APK 를 만들 때 Javac 를 이용해서 bytecode 인 .class 를 만든 후dex compiler 를 이용해서 bytecode 들을 .dex 로 만든다. -Android Studio 3.0 Beta 부터 "D8" 이라고 불리는 새로운 dex compiler 를 사용할 수 있다. D8 은 compile time 도 줄였고, .dex 파일 사이즈도 줄였다..Android 측에서 제공하는 자료에 따르면 Compile Time 은 약 30% 정도 줄었다. 파일 사이즈는 약 5% 정도 줄었다. ( 사이즈.. 2017. 8. 13.
[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.
[Kotlin Tutorial] 클래스, objects, 그리고 인터페이스 #1 - Chap4. Classes, objects, and interfaces [Kotlin Tutorial] 클래스, objects, 그리고 인터페이스 #1 - Chap4. Classes, objects, and interfaces 참조 : Kotlin in Action 4.1. Defining class hierarchies 4.1.1. Interface in Kotlin -Kotlin 의 interface 는 Java8 과 비슷하다.abstract method 를 가질수도 있고, Java8의 default method 도 가질 수 있다. ( Java8 과는 다르게 default keyword 는 필요없다 )단, state 는 여전히 가질 수 없다. ( 실제 variable ) -Kotlin 에서 interface 정의는 아래와 같다.interface Clickable{ fun.. 2017. 8. 11.
[Effective Objective-C] #9 클래스 클러스터 패턴을 사용해 구현의 상세 내용을 숨기라 [Effective Objective-C] #9 클래스 클러스터 패턴을 사용해 구현의 상세 내용을 숨기라 출처 : Effective Objective-C -클래스 클러스터(class cluster)는 추상 기본 클래스(abstract base class) 뒤편에 상세 구현을 숨길 수 있는 아주 훌륭한 방법이다.이 패턴은 오브젝티브-C 시스템 프레임워크 전반에 걸쳐 사용된다.아래 함수가 예이다.+ (UIButton*)buttonWithType:(UIButtonType)type; 클래스 클러스터 생성하기 -typedef NS_ENUM(NSUInteger, EOCEmployeeType){ EOCEmployeeTypeDeveloper, EOCEmployeeTypeDesigner, EOCEmployeeTypeFi.. 2017. 8. 11.
반응형