Skip to content

Java - 참조 변수

draft 문서

이 문서는 아직 미완성 문서 입니다!

TODO:

참조 변수와 로컬 변수의 차이점

참조 변수의 특징 및 사용 용도

참조 변수의 정의

자바를 공부하다보면 참조 변수(Reference variable)을 공부하게 됩니다. 참조 변수란, 메모리 주소 값을 저장하는 자료형입니다. 아래의 예제를 살펴보겠습니다. jshell을 통해 class를 생성하고 인스턴스를 생성하면 아래의 13번 라인, 16번 라인과 같이 16진수 주소 값이 각 변수마다 할당됩니다.

참조 변수 선언
jshell> class Animal{
   ...>     private int number;
   ...>     Animal(int number){
   ...>         this.number = number;
   ...>     }
   ...>     int getNumber(){
   ...>         return this.number;
   ...>     }
   ...> }
|  created class Animal

jshell> Animal cat1 = new Animal(1);
cat1 ==> Animal@52cc8049

jshell> Animal cat2 = new Animal(1);
cat2 ==> Animal@27973e9b
cat1과 cat2가 저장한 주소 값은 사용자가 생성한 메모리 공간 즉, Heap 메모리 주소 공간1을 가리키게 되면서 데이터를 접근할 수 있게 됩니다.

Heap 공간에 있는 number 접근
1
2
3
4
5
jshell> cat1.getNumber();
$4 ==> 1

jshell> cat2.getNumber();
$5 ==> 1

그렇다면, 저장한 1이라는 값이 같으니까 cat1과 cat2가 같은 것일까요? 아닙니다. cat1과 cat2가 저장한 주소 값이 다르기 때문입니다.

참조 자료형 비교
jshell> cat1 == cat2
$6 ==> false

반면 새로운 Animal 변수인 cat3를 cat2의 값을 저장하면 cat3와 cat2는 같은 변수라고 인식이 됩니다. cat2와 cat3의 저장한 주소 값이 같기 때문입니다.

참조 자료형 비교
1
2
3
4
5
jshell> Animal cat3 = cat2;
cat3 ==> Animal@27973e9b

jshell> cat3 == cat2
$8 ==> true

즉, 이 예제를 통해 알 수 있는 사실은, new 키워드를 통해 객체를 생성하면, 변수 저장을 위한 메모리 공간이 할당 됨을 알 수 있습니다.



  1. Heap 메모리 주소 공간을 확인하는 방법 확인 필요 - documentation 

Comments