자바로 프로젝트를 진행하고 있다. 하지만, 자바에 대한 개념이 약해서 예전에 정리했던 자료들을 보면서 익히고 있고 프로젝트를 하면서 어느정도 손에 익었다고 생각이 된다. 아직까지는 자바가 강세이긴 한 것 같다…ㅜ 조금 더 자바에 대해 공부하기 위해 이펙티브 자바책도 사서 공부해봐야겠다.

그럼 이제 본론으로 들어가서 자바에서는 자료형을 크게 두 가지로 나눌 수 있다. 기본 자료형(Primitive Type)과 참조 자료형(Reference Type. 여기서는 Wrapper Class)이 존재한다.

  • 기본 자료형 : char, byte, short, int 등등
  • 참조 자료형 : Integer, Byte 등등

그럼 자바에서 Primitive Type과 NonPrimitve Type을 만들어 놓은 이유는 무엇일까??

효율성을 위해서라고 한다. Primitive Type의 변수는 값을 직접 포함한다. 참조형 타입의 변수는 메모리 내의 다른 곳에 저장된 객체를 참조하는 참조이다.

Wrapper Type의 값을 사용해야 할 때마다 JVM은 객체를 메모리에서 찾아 값을 가져와야 한다. 반면에 값이 포함된 객체에 대한 참조 대신 변수 자체에 값이 포함되어 있는 Primitive Type에는 메모리에 접근할 필요가 없다.

객체인 Wrapper는 힙 영역에 저장된다. Primitive는 단지 "값"이기 때문에 스택 영역에 들어간다. 힙의 래핑된 Primitive의 경우 스택에 있는 값과 Wrapper 객체에 대한 참조가 둘 다 필요하기 때문에 더 효율적이다.

흠… 아직까지 무슨 말인지 모르겠다… 위에서 찾아본 바로는 효율성을 위해서 존재하는 것이 가장 이해가 간다.

또 다른 의견으로는 메모리 및 CPU 처리 측면에서 Primitive Type이 더 가볍고 효율적이라는 의견도 존재한다.

+추가 의견으로는 객체 생성, 힙 할당이 너무 비싸고 성능상의 불이익이 있기 때문이라고 한다. int, float 등의 Primitye Data Type이 가장 많이 사용되므로 Object로 만드는 것은 엄청난 성능 저하일 것이다.

참고 사이트