참조 변수 (reference 타입)

Jan 28, 2024
참조 변수 (reference 타입)

1. 기초 변수 (Primitive 타입)

int, double, char 등 기초 자료형(=원시 자료형)을 뜻하며 사이즈가 정해져 있음 ex. 주민번호 13자리. int는 4byte니까 52byte로 고정.
  • 채팅 메시지를 기초 자료형으로 설계를 한다면, 최대 1만자까지 허용한다고 쳐도 char 10,000개 → 20,000byte로 크기가 고정되니까 메모리 낭비가 심하다. → 이때 참조 변수를 사용!
 
notion image
notion image
프리미티브 타입은 sum값을 6번 라인처럼 바꾼다고 해도 num값이 바뀌지 않는다. (주소값이 저장된 게 아니기 때문! 값이 복사된 것이기 때문!)
 

2. 참조 변수 (reference 타입)

사이즈를 미리 알 수 없을 때 reference 타입을 사용한다. n = *1000 (포인터) 주소값을 저장하는 것이며, n이 주소를 통해서 값에 접근한다. * 즉, 값을 찾기 위해 2번 움직인다.
ex) 지하철 사물함에 1000억 안들어가잖아.. (사이즈가 가변적이잖아) 그래서 사물함에 돈이 있는 장소에 대한 쪽지만 남겨두는거임 (주소값을 저장) >> 그 주소를 통해서 접근! (다른 언어에선 포인터라고 부름)
notion image
 

2-1. 참조 변수 예시

notion image
notion image
notion image
notion image
💡
* 본인들이 가리키는 주소(객체)의 값이 바뀌어서 p3와 p1의 값이 같이 바뀐 것 * p3와 p1은 참조하는 주소 값이 같다! * heap에 Person 이라는 이름이 뜨겠지? 상태(변수) 값도 뜨겠지? 그걸 가리키는게 p1(변수명. 애는 stack에 저장되어서 heap에 뜬 상태값을 가리킴) 이겠지? 그 p1이 바로 참조변수
Person p3 = p1; 자료형 | 변수명 | 값 => p1의 값(참조하는 주소값)을 p3에 담았다.
객체를 생성할 때는 new 키워드를 사용하여 힙에 메모리를 할당하고, 객체의 속성과 메소드를 저장하기 위한 공간을 만든다. 이렇게 생성된 객체는 힙 영역에 저장되며, 해당 객체에 접근하기 위한 참조 변수를 사용하여 참조할 수 있다.
 

 
💡
레퍼런스 타입은 주소값을 거치니까 프리미티브 타입이 속도가 더 빠름.
💡
객체 사이즈를 미리 알 수 없음. (개발자가 정하니까) 그런 자료 형태 > 참조 변수o
배열은 미리 공간이 정해져 있어서 사이즈를 알 수 있음 > 참조 변수x
 
 
Share article

codingb