[Java] 기본형 변수와 참조형 변수

tiki·2021년 12월 5일
5

Java

목록 보기
3/4

🤔 궁금증

자바 코드에서 int 와 Integer의 차이는 무엇일까?
혹은
Boolean 과 boolean의 차이는 무엇이며 언제 어떻게 사용해야 할까?


기본형 변수(Primitive Variable)

int number = 1;

실제 값을 저장하며 아래와 같이 8가지가 있다.

  • boolean
  • char
  • byte, short, int, long
  • float, double

특징은 다음과 같다.

  • 산술 연산이 가능함.
  • null로 초기화 할 수 없음.

참조형 변수(Reference Variable)

Integer number = new Integer(1);

어떤 값이 저장되어 있는 주소를 값으로 가진다. 8개의 기본형을 제외한 나머지 모든 타입

ex> Integet, Boolean, String....

특징은 다음과 같다.

  • 산술 연산 불가
  • null로 초기화 할 수 있음.
  • DB와 연동시 DTO 객체에 null이 필요한 경우 사용 할 수 있음

메모리에서 두 변수 비교

기본형 변수는 stack에 실제 값을 저장하여 사용하며, 참조형은 마치 객체를 저장하는 것처럼 Heap에 실제 값을 저장하고 해당 주소를 stack에 저장하는 방식을 사용한다.

따라서 해당 값들을 매개변수로 이용할 때

  • 기본형 매개변수는 변수의 실제 값만 가져오는 것이기에 읽기만 가능한다.
  • 참조형 매개변수는 변수의 값을 읽고 변경할 수 있다.

두 변수간의 변환

이렇게 차이점이 있지만 왜 그동안 사용하면서 느끼지 못했을까?
이 차이를 이해하려면 우선 Boxing과 UnBoxing을 알아야 한다.

  • Boxing(기본형 변수 -> 참조형 변수)
  • UnBoxing(참조형 변수 -> 기본형 변수)

원래는 기본형 변수를 참조형 변수로 변환했다면 해당 값은 Boxing 되어 값을 변경하는 것이 불가능하다. UnBoxing하고 실제 리터럴 값을 꺼내어 변경하고 다시 Boxing하는 값을 거쳐야한다.

하지만 우리는 너무 쉽게

Integer number = 1; 

라고 사용했다.

그 이유는 JDK 1.5 버전 이후 사용 가능했던 AutoBoxing과 AutoUnBoxing 기능 때문이다. 말그대로 Boxing과 UnBoxing을 자동으로 해주는 기능이다.


👉 결론

지금까지는 AutoBoxing과 AutoUnBoxing 기능으로 참조형 변수도 마치 기본형 변수처럼 편하게 사용해왔었다. 하지만 이를 정확히 알고 구분해서 사용할줄 알아야 더 좋은 개발자로 성장할 수 있으라 본다..!

차이를 구분해보자면 우선 기본형을 사용하는 것이 메모리, 속도적인 측면에서 더 좋을 것으로 생각된다. 그렇다고 기본형 변수만 사용할 수 있는가?는 절대 아니다.

참조형 변수를 사용해야할 경우는 다음과 같다.

  • 기본형 변수는 null 값을 처리할 수 없기 때문에 DB와 연동되는 데이터 혹은 null 값이 들어가는 변수일 경우
  • 여러 메서드를 거치면서 값이 변할 수 있는 가능성을 가지거나, 값을 수정할 수 있는 여지가 있을 때
  • 자바 라이브러리를 통한 비교 및 계산시 참조형 변수가 필요할 때

이런 경우 이외에 상수 혹은 메서드의 리턴 값을 처리할 때 기본형 변수를 사용하는 것을 고려해보자


📎 Reference

profile
하루하루 조금씩 발전하려는 개발자 입니다.

0개의 댓글