Kotlin/Effective Kotlin 요약
-
아이템4 - inferred 타입으로 리턴하지 말라Kotlin/Effective Kotlin 요약 2023. 1. 3. 00:01
타입 추론 코틀린의 타입 추론은 널리 알려진 코틀린의 특징입니다. 자바 10에서도 타입 추론을 도입하였습니다. 타입 추론을 사용하는 경우 절대로 슈퍼클래스 또는 인터페이스로는 설정되지 않습니다 물론 타입을 명시적으로 지정하여 이런 문제를 해결할 수 있습니다. 하지만 직접 라이브러리를 조작할 수 없는 경우에는 이런 문제를 간단하게 해결할 수 없습니다. 인터페이스에서의 위험성 CarFactory 인터페이스 interface CarFactory{ fun produce(): Car } 대부분의 공장에서 Fiat126이라는 자동차를 생상하여, 이를 디폴트로 두었습니다. val DEFAULT_CAR: CAR = Fiat126P() 코드를 작성하다 보니 DEFAULT_CAR는 CAR로 명시적으로 지정되어 있어서 함수..
-
아이템3 - 최대한 플랫폼 타입을 사용하지 말라Kotlin/Effective Kotlin 요약 2022. 12. 31. 00:01
개요 코틀린에서 null-safety는 주요 기능 중 하나입니다. 만약 자바에서 String 타입을 리턴하는 메서드가 존재하고 코틀린에서 이를 사용하려면 어떻게 해야 할까요? @Nullable, @NotNull 어노테이션이 붙어있다면 해당 프로퍼티에 맞게 변환해주면 됩니다. 하지만 어노테이션이 붙어있지 않는다면 안전하게 nullable으로 가정해야 합니다. 하지만 어떤 메서드는 null을 리턴하지 않을 것이 확실할 수 있습니다. 이런 경우에는 not-null을 나타내는 !!를 붙입니다. 이때 자주 문제가 되는 부분이 자바의 제네릭 타입입니다. 코틀린과 자바의 제네릭 타입 코틀린이 디폴트로 모든 타입을 nullable로 다룬다면, 리스트 자체만 널 인지 확인해서는 안 되고, 그 내부에 있는 것들도 널 인지..
-
아이템2 - 변수의 스코프를 최소화하라Kotlin/Effective Kotlin 요약 2022. 12. 29. 00:01
변수의 스코프란? 코틀린의 스코프는 기본적으로 중괄호로 만들어집니다. 내부 스코프에서 외부 스코프에 있는 요소에만 접근할 수 있습니다. val a = 1 fun fizz(){ val b = 2 print(a + b) } //이 위치에서는 a를 사용할 수 있지만, b는 사용할 수 없음 스코프를 최소화하면 장점 - 코드를 분석할 때 추적 관리에 용이합니다. (mutable 보다 immutable 프로퍼티를 선호하는 이유와 동일) - 스코프의 범위가 너무 넓으면 다른 개발자에 의해 변수가 잘못 사용될 수 있습니다. 이런 관점에서 변수를 정의할 때 초기화하는 것이 좋습니다. 여러 프로퍼티를 한꺼번에 설정해야 하는 경우에는 구조 분해 선언을 활용하는 것이 좋습니다. fun main() { updateWeather..
-
아이템1 - 가변성을 제한하라Kotlin/Effective Kotlin 요약 2022. 12. 26. 00:01
Kotlin에서는 read-write property인 var을 사용하거나, mutable 객체를 사용하면 상태를 가질 수 있습니다. var a = 10 var list: MutableLost = mutableListOf() 상태를 가지는 경우는 양날의 검입니다. 장점 : 시간의 변화에 따라서 변하는 요소를 표현할 수 있다. 단점 : 상태를 적절하기 관리하는 것은 어렵다 1. 어디서 변경이 일어났는지 추적하기 힘들다. 2. 어떤 값을 가지고 있는지 알아야 코드의 실행을 예측할 수 있습니다 (예를 들어 분기문이 있을 때) 3. 멀티스레드 프로그래밍일 때는 적절한 동기화가 필요합니다. (Lock, 원자적 연산 등) 4. 테스트하기 어렵습니다 (모든 상태를 테스트해야 합니다, 상태가 늘어나면 더 힘들어집니다)..