도서/이펙티브 코틀린3 Item4 - inferred 타입으로 리턴하지 말라 코틀린 타입 추론을 사용할 때는 몇 가지 위험한 부분이 있는데, 이러한 위험한 부분을 피하려면 할당 시에 inferred 타입은 정확하게 오른쪽에 있는 피연산에 맞게 설정된다는 것을 기억해야함 절대 수퍼 클래스 또는 인터페이스로는 설정되지 않음 예시 open class Animal class Zebra: Animal() fun main() { var animal = Zebra() animal = Animal() } 명시적으로 지정 open class Animal class Zebra: Animal() fun main() { var animal: Animal = Zebra() animal = Animal() } 그러나 직접 라이브러리를 조작할 수 없는 경우에는 이런 문제를 간단하게 해결할 수 없고 이러한 .. 2022. 9. 24. item3 - 최대한 플랫폼 타입을 사용하지 마라 코틀린은 null-safety 매커니즘으로 인해 NPE를 거의 찾아보기 힘듬 null-safety 매커니즘이 없는 자바, C 등의 프로그래밍 언어와 코틀린을 연결해서 사용할 때는 NPE 예외가 발생할 수 있음 public class JavaTest{ public String giveName() { ... } } 위 자바 코드로 반환된 타입을 사용할때에 @Nullable 어노테이션이 붙어 있다면 nullable로 추정하고 String?으로 변경하면 되는데 만약 붙어 있지 않다면 자바에서 모든 것이 nullable일 수 있으므로 최대한 안전하게 접근하기 위해 nullable로 가정하고 접근해야 함 제네릭 타입 public class UserRepo { public List getUsers() { ...} }.. 2022. 9. 24. item2 - 변수의 스코프를 최소화하라 상태를 정의할 때는 변수와 프로퍼티의 소코프를 최소화하는 것이 좋음 프로퍼티보다는 지역 변수 사용 최대한 좁은 스코프를 갖게 되는 변수 사용 요소의 스코프라는 것은 요소를 볼 수 있는 컴퓨터 프로그램 영역 코틀린의 스코프는 기본적으로 중괄호로 만들어지며, 내부 스코프에서 외부 스코프에 있는 요소에만 접근할 수 있음 //안좋은 예시 val a = 1 fun fizz() { val b = 2 println(a + b) } val buzz = { val c = 3 println(a + c) } //변수 스코프를 제한하는 예 val users = listOf() var user: User // 외부/내부 모두 사용할 수 있는 변수 사용 for (i in users.indices) { user = users[i].. 2022. 9. 24. 이전 1 다음