본문 바로가기
JAVA 정리노트

JAVA 일반 변수와 참조 변수의 차이

by Dodledd 2024. 1. 16.

변수란?

일반 변수와 참조 변수를 이해하기 위해서는 먼저 변수를 알아야 한다.

변수는 변수만으로 사용할 수 없고 리터럴과 합쳐져야한다.

변수는 상자에 물건을 담을 때 상자에 해당하고 리터럴(값)은 물건에 해당한다.

 

코드로 보면 변수는 int i = 1 ; 일 때 i 이고 리터럴(값)은 1에 해당한다.

 

여기까지 이해했으면 일반 변수와 참조 변수를 구분 할 수 있다.

 

일반 변수란?

일반 변수는 위에서 코드로 적혀 있는 int i = 1 ; 와 같은 형식이다.

일반 변수 종류에는 byte, char, short, int, float, long, double, boolean 와 같은 종류로 있다.

이 친구들은 stack 영역에 존재하는데 한 덩어리로 존재한다. (int i = 1) 이런식으로

그럼 한 덩어리로 존재하지 않는 친구들이 있는데 그 친구들이 바로 참조 변수이다.

stack에 변수가 생기는 시점은     (int i ; ) <- x      //      (int i = 2 ;) <- o    처럼 변수 i 에 리터럴(값)이 주어져야한다,

 

참조 변수란?

참조 변수는 일반 변수와 다르게 (주소를 가르키는 놈 + 해당 주소에 값을 가진 놈) 으로 존재한다.

주소를 가르키는 놈은 일반 변수가 존재하는 stack [각주:1] 영역에 같이 존재하고 heap[각주:2]영역에는 값을 가진 놈이 존재한다.

stack 영역 속에서 삿대질하고 있는거다. heap 영역속에  값을 가지고 있는 친구에게. 이걸 참조 라고 한다.

 

int[ ] arr = new int[10];   arr이 주소 값을 가지고 있고 그 주소가 가르키는 곳에는 int[10]; 값을 가지고 있는 친구들이 있다.

 

(int[ ] arr = null;) <- 처럼 일반적으로 주소 값이 있지만 heap 영역에 참조할 값이 없는 경우(null) garbage collector가 와서 수거해버린다.

 

이해가 안가면 외워라, 외우다보면 언젠가 이해될 날이 온다. -김정범 교수님.

  1. 일반적으로 개발자가 코딩을 작성 하는 곳 [본문으로]
  2. 객체와 필드가 존재하고 참조하는 값이 있는 곳 [본문으로]