Primitive types in Java, Kotlin

코틀린에서는 원시 타입(Primitive type)이 없다. 모든게 객체다. 자바에서는 아직 성능 문제로 원시 타입을 사용하고 있다.

스택오버플로에서 다음과 같은 질문을 찾을 수 있다. "Why do people still use primitive types in Java?"

Joshua Block의 Effective Java에서, "Avoid creating unnecessary objects" 규칙을 언급하고 있는데 왜냐하면, 다음 코드를 보자.

public static void main(String[] args) {
    Long sum = 0L; // uses Long, not long
    for(long i = 0; i <= Integer.MAX_VALUE; i++) {
        sum += i;
    }
    System.out.println(sum);
}
public static void main(String[] args) {
    long sum = 0L; // uses long
    for(long i = 0; i <= Integer.MAX_VALUE; i++) {
        sum += i;
    }
    System.out.println(sum);
}

눈치 채셨다면, 두개의 코드에서 다른 점이라곤 객체타입인 Long과 원시타입인 long의 선언부다. 첫번째는 실행에 43 초가 걸린다고 말하고 있고 두번째는 8초정도 이다.

코틀린에서는 객체로 알려진 Int, Float, Boolean,... 과 같은 타입이 있으며 이것은 박싱 타입으로 우리가 성능에 대해 걱정할 필요는 없을 것 같다.

나쁜 성능을 걱정한다면, 코틀린 컴파일러가 필요에 따라 자바 원시타입으로 변환되어 성능 이슈를 줄일것이다. 물론 전적으로 컴파일러 성능에 달렸다. 

 

 

 

youngdeok's picture

Language

Get in touch with us

"If you would thoroughly know anything, teach it to other."
- Tryon Edwards -