본문 바로가기
[Effective Kotlin] Item 47: Consider using inline classes 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # function 뿐만 아니라 single value 를 가진 class 도 inline 될 수 있다. class 앞에 value 을 붙여주면 된다. (돼왕 : 책에는 inline 으로 나오지만, inline modifier 는 deprecated 되고 value 로 변경되었다. value class Name(private val value: String){ /../ } # value class 안에 있는 함수들은 static method 로 치환된다. # 일반적으로 value .. 2022. 6. 8.
[Effective Kotlin] Item 46 : User inline modifier for functions with parameters of functional types 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # inline modifier 를 붙여주면 컴파일 단계에서 호출하는 부분을 inline 이 정의된 구현으로 변경해준다. 이 동작은 아래의 장점을 가진다. type argument 가 reified 될 수 있다. 더 빠른 수행이 된다. non-local return 이 허용된다. 물론 단점도 있는데 이는 나중에 알아본다. A type argument can be reified # Java 가 처음부터 generic 을 가지고 있던 게 아니었다. J2SE 5.0 버전과 함께 2004.. 2022. 6. 7.
[Effective Kotlin] Item 45: Avoid unnecessary object creation 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # 동일 내용의 string literal 과 값이 작은 Boxed primitive 는 동일 JVM 안에서 재사용된다. (Integer cache 는 -128~127 의 숫자를 들고 있다.) # Int? (nullable) primitive type 은 null 을 받아들여야 하기 때문에 Integer 로 사용되고, Int 의 경우 primitive int 가 사용된다. Is object creation expensive? # Objects 는 추가 공간을 점유한다. 64-bit.. 2022. 6. 6.
[Effective Kotlin] Item 44: Avoid member extensions 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # interface PhoneBook{ fun String.isPhoneNumber(): Boolean } class Fizz: PhoneBook{ override fun String.isPhoneNumber(): Boolean { /../ } } 위와 같은 구현이 가능하지만 피하는 것이 좋다. (DSL 제외) # 특히 extension 을 visibility control 이슈로 member 로 정의하면 안 된다. class PhonebookIncorrect{ fun Strin.. 2022. 5. 30.
[Effective Kotlin] Item 43 : Consider extracting non-essential parts of your API into extensions 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # member function 과 extension function 의 결정적 차이는.. extension 은 별도로 import 되어야 함. extension 은 virtual 이 아님. (재정의될 수 없다.) member 가 더 높은 우선순위를 가짐. class 에 대한 것이 아닌 type 에 대한 것임. (nullable type 에도 정의할 수 있음) class reference 의 member 로 list 되지 않음. # extension 은 별도의 pkg 에 위치할 수.. 2022. 5. 29.
[Effective Kotlin] Item 42 : Respect the contract of compareTo 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # compareTo 는 Any 에 속해있는 녀석이 아니다. 해당 함수 호출이 필요할 경우 Comparable interface 를 구현해야 한다. # compareTo 는 다음과 같은 특정을 가져야 한다. Antisymmetric. ( a>=b & b>=a 이면 a==b) Transitive. (a>=b & b>=c 이면 a>=c) Connex. 모든 2개 이상의 element 들이 관계를 가져야만 한다. Do we need a compareTo? # Kotlin 에서는 comp.. 2022. 5. 28.
[Effective Kotlin] Item 41 : Respect the contract of hashCode 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. Hash table Problem with mutability # Mutable object 는 hash 등과 같은 data structure 에 사용되면 안 된다. 또는 collection 에 들어가는 순간부터 data 를 변경하면 안 된다. The contract of hashCode # Consistency : 동일 object 에 여러번 호출되어도 동일한 값을 제공해야 한다. 2개의 object 의 equals 값이 true 라면, hashCode 값도 동일해야 한다. 필수.. 2022. 5. 27.
[Effective Kotlin] Item 40 : Respect the contract of equals 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # Any 를 상속한 모든 object 는 잘 정의된 아래 3개 규칙을 지켜야 한다. equals hashCode toString Equality # object 같은 type 이거나 subtype 일 때만 equality operator 를 사용할 수 있다. Why do we need equals? The contract of equals # Reflexive ( x.equals(x) == true ) Symmetric ( x.equals(y) == y.equals(x) ) Tr.. 2022. 5. 26.
[Effective Kotlin] Item 39 : Prefer class hierarchies to tagged classes 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # class 가 어떻게 동작해야 하는지를 명시하는 "mode" 라는 constant 를 가진 class 들이 있다. 이 클래스들을 tagged class 라고 부른다. tagged class 의 가장 큰 문제는 다른 mode 에 대해서 코드가 공존하면서 충돌을 일으킨다는 점이다. # tagged class 의 문제들은 다음과 같다. 복수개의 mode 를 다루므로 boilerplate 가 발생한다. property 사용에 대한 일관성이 떨어진다. mode 에 따라 미사용하는 pro.. 2022. 5. 19.
반응형