Uknow's Lab.
article thumbnail

현재 코틀린을 쓰는 분들은 아마도 자바에서 넘어오신 분들이 많을 것 같습니다.

아무래도 같은 JVM 계열의 형제 언어이고, 상호 운용이 가능하고, 여러 특징들을 공유하니까요.

저도 자바 개발자였기에, 다른 언어에 비해 상대적으로 코틀린은 쉽게 배울 수 있었던 것 같습니다.

 

 

하지만 자바 개발을 하다가 오신 분들이라면 다소 당황하게 되는 포인트가 하나 있을텐데,

 

Long에 Int 변수를 넣어줬을 때, 에러가 발생한다

 

toLong()으로 Long 타입으로 변환시켜준 후 할당해야 함

 

바로 더 넓은 범위의 타입으로 자동으로 변환되지 않는다는 점 입니다.

 

 

자바에서는 별 문제 없이 Int 형 변수를 Long 형에 넣어주면, Int -> Long으로 자동으로 승격시켜주는 것에 익숙했기에 조금 의아합니다.

어째서 자동으로 변환해주지 않는 것일까요?

 

 

 

Wrapper 클래스는 자동으로 변환되지 않는다

 

Long.valueOf로 형변환한 뒤 값을 넣어준다.

 

자바의 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으로 자동으로 형변환되지 않습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.