Kotlin 3

kotlin generic variance

다음과 같은 제네릭 클래스가 있다. class Cup 위 코드에서 타입 파라미터 T 는 variance 한정자(out 또는 in )가 없다. 이럴 때는 기본적으로 invariant(불공변성)이다. invariant라는 건 제네릭 타입으로 만들어지는 타입들이 서로 관련성이 없다는 뜻. 말하자면 Cup 과 Cup , Cup 은 전혀 관계없다. 불공변성 관계 fun main() { val anys: Cup = Cup //Error: Type mistach val nothings: Cup = cup() // Error } 만약 어떤 관련성을 원한다면 out 또는 in 이라는 variance 한정자를 붙인다. out 은 타입 파라미터를 covariant(공변성)로 만든다. 이는 A가 B의 서브타입일 때 Cup 가..

Kotlin 2022.02.27

[Kotlin] 코틀린이 null을 다루는 방식 ? 연산자와 ?: 엘비스 연산자

Kotlin ? keyword Java에서는 객체의 메서드를 호출할 때 NP가 발생할 수 있으므로 메서드 호출 전 null체크가 필요하다. if(foo != null) foo.bar 코틀린은 안전한 null 체크를 위한 ?연산자를 제공한다. foo?.bar() //null이라면 null, null아니라면 결과 값이 출력된다. 하지만 역시 안전한 호출의 결과 타입도 null이 될 수 있으므로 유의해야 한다. 이를 테면 String.toUpperCase의 결과는 String을 반환한다. 반면 String?.toUpperCase식의 결과 타입은 String?이 된다. ?연산자를 연속해서 사용하는 것도 가능하다. class Address(val streetAddress: String, val zipCode: I..

Kotlin 2021.05.15