현재 코틀린을 쓰는 분들은 아마도 자바에서 넘어오신 분들이 많을 것 같습니다.
아무래도 같은 JVM 계열의 형제 언어이고, 상호 운용이 가능하고, 여러 특징들을 공유하니까요.
저도 자바 개발자였기에, 다른 언어에 비해 상대적으로 코틀린은 쉽게 배울 수 있었던 것 같습니다.
하지만 자바 개발을 하다가 오신 분들이라면 다소 당황하게 되는 포인트가 하나 있을텐데,
바로 더 넓은 범위의 타입으로 자동으로 변환되지 않는다는 점 입니다.
자바에서는 별 문제 없이 Int 형 변수를 Long 형에 넣어주면, Int -> Long으로 자동으로 승격시켜주는 것에 익숙했기에 조금 의아합니다.
어째서 자동으로 변환해주지 않는 것일까요?
자바의 Wrapper 클래스를 떠올려보면 쉽게 이해할 수 있습니다.
자바의 int, long, double 등의 타입은 primitive type으로써, 객체가 아닙니다.
이들을 객체로 감싸(wrap) Integer, Long, Double과 같이 기본(primitive) 자료형을 객체로 다룰 수 있습니다.
이들 Wrapper 클래스들을 사용할 때엔 Int형이 자동으로 Long으로 확장되지 않습니다.
코틀린에서는 모든 것이 객체입니다. Int, Long, Double, Boolean등의 기본 타입 역시 모두 객체입니다.
자바처럼 int <-> Integer와 같이, primitive <-> wrapper class를 제공하는 것이 아니라, 오직 객체 형태만을 사용합니다.
따라서 자바의 Integer가 Long으로 자동으로 형변환되지 않듯이,
코틀린의 Int 역시 객체이기 때문에 Long으로 자동으로 형변환되지 않습니다.
'언어 > Kotlin' 카테고리의 다른 글
Kotlin에서의 Setter를 다루는 방법 (1) | 2024.01.30 |
---|---|
코틀린의 반올림 방식 : 오사오입 (0) | 2023.06.14 |
[Kotlin/코틀린] 여러 조건을 기준으로 정렬하기 (0) | 2023.05.21 |
자바의 StringBuilder 개행문자 삽입방법 - append(str + "\n") vs append(str).append("\n") (0) | 2023.02.01 |
[Kotlin] BigDecimal을 사용하여 매우 큰 수, 소숫점 처리하기 (0) | 2022.12.21 |