본문 바로가기
[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.
[Effective Kotlin] Item 38 : Use function types instead of interfaces to pass operations and actions 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # fun setOnClickListener(listener: (View) -> Unit) { /../ } setOnClickListener { /../ } setOnClickListener(fun(view){ /../ } setOnClickListener(::println) setOnClickListener(this::showUsers) 위와 같은 적용이 가능하다. interface 로 정의해야 할 특별한 이유가 없다면, function type 을 사용하자. When shoul.. 2022. 5. 18.
[Effective Kotlin] Item 37 : Use the data modifier to represent a bundle of data 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # data modifier 를 사용하면 primary constructor 에 대해 자동으로 아래의 작업이 구현된다. toString equals and hashCode copy componentN # destructoring 은 단점이 있다. element 의 순서를 바꾸는 순간 사용하는 곳 모두 순서를 바꿔줘야 할 수 있다. IDE 가 warning 을 표시하도록 하기 위해, 변수이름을 같이 해주는 것이 최소한의 대책일 수 있다. Prefer data classes inste.. 2022. 5. 17.
반응형