[Java] 기초 - 기본형 변수와 참조형 변수 (Reference Variable)

J._.n·2024년 7월 8일

[Java]

목록 보기
6/10
post-thumbnail

변수란?

데이터(값)을 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다.

자바(Java)에서 변수는 크게 2가지로 분류할 수 있다.

  • 기본형 변수(Primitive Variable)
  • 참조형 변수(Reference Variable)

기본형 변수(Primitive Variable)란?

기본형 변수에 저장되는 값은 리터럴 값(실제 값)으로 있는 그대로의 값을 저장한다.
아래는 기본형 변수에 저장될 수 있는 자료형들이다.

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

기본형 변수는 참조형 변수와 다르게 연산이 가능하고 초기화시 '0'으로 초기화 된다.

참조형 변수(Reference Variable)란?

기본형 변수와 다르게 리터럴 값이 아닌 주소 값을 저장하는 변수이다.
여기서 주소 값이란 메모리의 주소값이다.

기본형 변수와 참조형 변수의 차이

기본형 변수는 선언시 Stack영역에 자료형의 크기만큼 메모리 공간을 차지하고 그 메모리 공간에 데이터(실제 값)가 저장된다.
참조형 변수는 선언하게 되면 기본형 변수와 같이 Stack영역에 생성되는 것은 기본형 변수와 같지만 Stack영역에 생성된 참조 변수의 경우 Heap영역에 생성된 메모리의 주소 값을 가지고 있다.

이해하기 쉽게 비유 하자면 기본형 변수의 경우 고정된 크기의 상자들로 크기가 고정되어 있어 Stack이라는 사무실에 잘 정리해서 쌓아둔다.
참조형 변수의 경우 크기가 가변적이기에 테트리스 하듯이 잘 정리될 수 없어 Heap이라는 큰 창고에 정리해두고 정리해둔곳의 주소를 사무실에 모아두고 필요한 경우 사무실에서 참조 변수에 적힌 주소대로 찾아가 값을 가져오거나 넣어둘 수 있는 개념으로 이해하면 쉽다.

	String str1 = new String("Java"); // 참조 변수(객체) 생성
    String str2; // 참조 변수만 생성
    str2 = str1; // str2에 str1의 주소값을 대입 
    System.out.println(str1 == str2); // true 출력
    String str3 = new String("Java");
    System.out.println(str1 == str3); // false 출력
    

왜 str1과 str2가 같은지 비교 했을 때는 true가 출력되고,
str1과 동일한 "Java"라는 문자열이 들어있는 str3가 같은지 비교 했을 때는 false가 출력 됐을까?
참조 변수에는 str1에는 "0x112"라는 주소값이 저장됐다고 했을 때 str2에 주소값을 대입 했으니 동일하게 "0x112"라는 주소가 있을 것이다. 하지만 새로운 주소값을 가지고 있는 str3는 "0x100"이 있으면 동일하지 않기 때문에 false를 출력한 것이다.
이처럼 참조 변수의 동등 연산자로 비교할 경우 주소값만을 비교하고 문자열이 같은지 비교하기 위해서는 아래 코드와 같이 String 클래스의 equals() 메서드를 이용해서 비교해야한다.

System.out.println(str1.equals(str3)); // true 출력
profile
개발자를 꿈꾸는 대학생

0개의 댓글