[Java] 기본형 VS 참조형

SUNNY_KIM·2024년 1월 5일
0
post-thumbnail

자바에서 참조형을 제대로 이해하는 것은 정말 중요하다.

변수의 데이터 타입(자료형)을 가장 크게 보면 기본형과 참조형으로 분류할 수 있다.



기본형(Primitive Type)

int , long , double , boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라 한다.

기본형의 특징

  • 모두 소문자로 시작된다
  • 비객체 타입이므로 null 값을 가질 수 없다. (기본값이 정해져 있음)
  • 메모리 스택 영역에 값 자체를 저장한다.
  • 들어있는 값을 그대로 계산에 사용할 수 있다. (숫자 같은 것들은 바로 계산할 수 있음)

참조형(Reference Type)

참조형 타입의 종류로는 기본형 타입을 제외한 나머지를 의미하며 클래스, 배열, 열거형, 인터페이스 등등 존재한다.
(ex.Student student1 , int[] students) 와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다.

참조형 타입 특징

  • 기본형 과는 달리 실제 값이 저장되지 않고, 자료가 저장된 공간의 주소를 저장한다.
  • 실제 값은 다른 곳에 있으며 값이 있는 주소를 가지고 있어서 나중에 그 주소를 참조해서 값을 가져온다.
  • 참조형 변수는 null로 초기화 시킬 수 있다
  • 메모리의 힙(heap)에 실제 값을 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장

그렇다면 String은 뭐지?
String은 사실 클래스다. 따라서 참조형이다.
그런데 기본형처럼 문자 값을 바로 대입할 수 있다.
문자는 매우 자주 다루기 때문에 자바에서 특별하게 편의 기능을 제공한다.



대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.

기본형과 참조형 모두 대입시 변수 안에 있는 값을 읽고 복사해서 전달한다.
기본형은 사용하는 값을 복사해서 전달하고, 참조형은 참조값을 복사해서 전달한다!


기본형대입

변수의 대입은 변수에 들어있는 값을 복사해서 대입한다. 여기서는 변수 a 에 들어있는 값 10 을 복사해서 변수 b 에 대입한다. 변수 a 자체를 b 에 대입하는 것이 아니다!


참조형대입

dataA 변수는 Data 클래스를 통해서 만들었기 때문에 참조형이다.
이 변수는 Data 형 객체의 참조값을 저장한다. Data 객체를 생성하고,
참조값을 dataA 에 저장한다. 그리고 객체의 value 변수에 값 10 을 저장했다.

변수의 대입은 변수에 들어있는 값을 복사해서 대입한다.
변수 dataA 에는 참조값 x001 이 들어있다.
여기서는 변수 dataA 에 들어있는 참조값 x001 을 복사해서 변수 dataB 에 대입한다.
참고로 변수 dataA 가 가리키는 인스턴스를 복사하는 것이 아니다! 변수에 들어있는 참조값만 복사해서 전달한다.
이제 dataAdataB 에 들어있는 참조값은 같다. 따라서 둘다 같은 x001 Data 인스턴스를 가리킨다.

기본형은 사용하는 값이, 참조형은 참조값이 들어있다!
변수에 어떤 값이 들어있든간에 그 값을 그대로 복사해서 전달한다.


참고

[인프런] 김영한의 실전 자바 - 기본편
☕ JAVA 변수의 기본형 & 참조형 타입 차이 이해하기

profile
호기심이 많은 백엔드 개발자

0개의 댓글