엄범

(Kotlin) 제네릭 - 변성(variance), 타입 프로젝션(type projection)

변성 (variance) List는 클래스(기저 클래스)이고, List<Int>는 타입이다. 타입 A의 값이 필요한 모든 장소에 타입 B의 값을 넣어도 아무 문제가 없다면 B는 A의 하위 타입(subtype)이다. 하위 클래스와 하위 타입은 미묘한 차이가 있다. A?와 A는 같은 클래스에 속하지만, A는 A?의 하위 타입이고 그 역은 성립...

(Kotlin) 타입 시스템 (Any, Unit, Nothing)

코틀린에서는 원시 타입과 참조 타입(래퍼 타입, 포인터 변수)을 별도 타입으로 따로 구분하지 않는다. 예를 들어 java의 int와 Integer 같이 구분하지 않고, Int 하나로 쓴다. 널이 될 수 없는 타입 은 컴파일 시 알아서 원시 타입으로 표현할 수 있는건 원시 타입으로 표현해주고, 메소드를 호출하는 등 래퍼 타입이어야 하는 경우 ...

(Kotlin) 수신 객체 지정 람다 - with / apply / let / run / takeif / also

수신 객체 지정 람다 with : prefix없이 접근하고 싶을 때 with는 원래 파라미터가 2개인 함수다. 그러나 두 번째 인자인 람다를 밖으로 빼서 원래 언어가 지원하는 구문인 것 처럼 사용할 수 있다. 보기 깔끔해진다. with의 람다 내에서는 전달된 객체에 prefix없이 접근할 수 있다. fun alphabet(): String { ...