[Java 기초] Primitive Type과 Boxing Type의 차이

이진영·2023년 10월 18일
0

JAVA 기초

목록 보기
9/9
post-thumbnail

개요

나는 이펙티브 자바를 공부하는 중에 Java에서 Primitive Type 이라는 유형을 알게 됐고, 해당 유형을 개인적으로 공부를 하기위해 해당 내용을 작성하게 됐다.


Primitive Type

Primitive Type은 Java에서 기본 데이터 타입을 의미한다.

타입의 종류

  • int, float, char, boolean

그렇다면 해당 데이터 타입의 장점은 무엇인가?

  • 메모리를 적게 사용하고 효율적이다.
  • 객체의 형태로 저장되지 않는다.(스택 메모리 영역에 저장이 됨)
    그렇기에 프로그램의 실행 흐름에 따라 할당과 해제가 빠르게 이루어지며, 데이터를 빠르게 읽고 쓸 수 있다.

📌반면 참조 타입?

참조 타입(reference types)변수들은 해당 객체의 주소를 저장하고, 실제 데이터는 힙 메모리에 저장됩니다. 힙 메모리는 객체가 생성되고 프로그램에 더 이상 필요하지 않을 때까지 데이터를 보관하며, Java의 가비지 컬렉션 기능에 의해 메모리가 관리가 이루어집니다.

📌 참조 타입 종류 : class, Interface, Array, Enum , Map, List 등등


Boxing Type

참조 타입을 객체로 감싸는 wrapper 클래스들을 의미한다. 이러한 클래스들은 primitive 값을 가지고 있고, 객체 지향 프로그래밍에서 유용한 메서드와 속성을 사용할 수 있도록 합니다.

// primitive type 사용 예제
int primitiveInt = 10;

// boxing type 사용 예제(Java9)
Integer boxedInt = new Integer(10);

// Java9 이후
Integer boxedInt = 10;

자바에서는 위와 같은 참조 타입을 Boxing Type으로 원활하게 빠구게 하는 autoboxing과 unboxing이라는 기능을 제공한다. 그렇기에 필요에 따라 변환이 가능하다.

Boxing Type VS Primitive Type

메모리 사용:

  • Primitive types은 적은 메모리를 사용합니다. 예를 들어, int는 4바이트를 사용하고, boolean은 1바이트를 사용합니다.
  • Boxing types은 객체이므로 더 많은 메모리를 사용합니다. 예를 들어, Integer 클래스는 추가적인 메모리를 사용하여 값을 감싸고 관련 메서드와 속성을 저장합니다.

Null 값

  • Primitive types은 null 값을 가질 수 없습니다. 예를 들어, int 변수는 0 또는 다른 정수값만 가질 수 있습니다.
  • Boxing types은 null 값을 가질 수 있습니다. 예를 들어, Integer 변수는 정수값 또는 null을 가질 수 있습니다.

성능:

  • Primitive types은 작은 메모리를 사용하고 빠른 연산을 지원하므로 연산이 빠릅니다.(실제로 이펙티브 자바에서는 10배 가까이 차이가 났다고 한다.)
  • Boxing types은 객체이기 때문에 메모리 사용과 연산에서 오버헤드가 발생할 수 있습니다. 따라서 성능 면에서는 primitive types을 사용하는 것이 더 효율적일 수 있습니다.

이러한 결론적인 측면에서는 Primitive Type이 압도적인 우세를 보일 수 있지만 항상 코드를 짤 때는 항상 정답이 없다는 것만 인지하고 가자!

profile
내가 공부한 것들을 적는 공간

0개의 댓글