Kotlin (코틀린)

[Kotlin] 코틀린 래퍼 클래스 Wrapper Class

Oscar:) 2024. 5. 7. 20:00

 

 

지난 포스팅에서 코틀린의 자료형에 대해 다루었고,

코틀린에서는 모든 자료형을 참조 타입으로 통일한다고 언급했었다.

 

이번 포스팅에서는 원시 타입과 참조 타입,

코틀린에서의 래퍼 클래스에 대해 이야기해 볼까 한다.

 

 


 

 

먼저, 지난 포스팅에서 사용했던 예제를 간단히 보자.

 

var age : Int = 29

 

int → Int ..!

 

원래 소문자를 사용하던 자료형을 대문자로 사용하고 있다.

 

별 것 아니라고 생각할 수도 있지만, 적어도 본인은 엄청난 일이라고 생각한다.

애초에 자바에서 소문자와 대문자는 명확한 용도의 차이가 있었기 때문이다.

 

 

여러 용도 차이가 있지만 그 중에서도 가장 핵심은

클래스클래스가 아닌 것으로 구분한다는 것이다.

 

모든 클래스의 이름은 대문자로 시작하게끔 네이밍하기에,

변수나 메서드를 포함하여 패키지(디렉토리)마저도 소문자로 네이밍하게 된다.

 

그리고 원시 타입 자료형 또한 클래스에 해당하지 않기에

int, char, boolean 등 소문자로 시작하게끔 네이밍되었다.

 

 


 

 

그렇다면 코틀린에서는 int → Int 로 사용하기에,

기존 int 자료형이 클래스로 인정 받았다는 것일까?

 

이를 이야기하려면 원시 타입과 참조 타입래퍼 타입에 대해 알아야 한다.

 

 

간단 요약)

원시 타입은 int, char, boolean 등에 해당하고 값이 직접 대입되며,
참조 타입은 String을 포함한 클래스 등에 해당하며 실제 값의 주소 값이 대입된다.

하지만 Collection의 제네릭에 사용될 때만 해도 int → Integer 로 사용해야 하는 것처럼,
원시 타입은 근본적으로 객체로서 인정 받지 못한다.

위와 같은 상황에서 박싱된 Integer를 래퍼 타입이라고 한다.

 

 

 

하지만 위대한 코틀린에서는 원시 타입과 래퍼 타입을 구분하지 않는다..!

 

그리하여 개발자는 원시 타입이라는 개념을 배제하고 한 가지 타입으로만 작업 할 수 있다.

 

즉, 기존 원시 타입들의 래퍼 클래스가 기본값으로 대체된 것이며,

이는 참조 타입으로서 통일되어 래퍼 클래스라는 개념 또한 사라졌다고 볼 수 있다.

 

Int 클래스 또한 실제로 찾아볼 수 있었다.

 

 

 


 

 

하지만 여기서 생각해봐야 할 것이 있다.

 

참조 타입이 원시 타입보다 당연히 무겁기 때문에,

매번 참조 타입으로 사용된다면 기존보다 성능상으로 비효율적이라 볼 수 있다.

 

 

하지만 위대한 코틀린은 이미 이에 대한 해결책 마저 마련해 놓았다.

 

 

개발자는 참조 타입으로 통일하여 코드를 작성하지만,

컴파일될 때 일반적으로는 원시 타입으로 컴파일해 준다...!

 

물론 제네릭 클래스로서 컴파일되어야 할 때는 알아서 참조 타입으로 컴파일 해준다.

 

 

 


 

 

 

오늘도 코틀린에게 감탄하고 간다.