3. 참조
우리는 일반적으로 기차를 탔을 때, 승차권을 보고 좌석을 찾아감

참조(參照)의 사전적 의미
“참고로 비교하고 대조하여봄”
기차표 티켓을 보고 자신의 좌석을 찾아감
↓
기차표 티켓(참조 변수) 을 보고(참조하여) 자신의 좌석을 찾아감
↓
주소 값이 담긴 참조 변수를 참조하여 자신의 좌석(객체의 정보) 을 찾아감
↓
주소 값이 담긴 참조 변수를 참조하여 객체의 정보를 찾아감
1. 참조 타입, Reference type
자바에서 데이터 타입은 크게 기본 타입과 참조 타입으로 구분함
class 키워드를 통해 생성된 객체(인스턴스)의 타입은 참조 타입(Reference type)
1-1. Mouse라는 가상의 쥐 클래스 작성
리액트에서는 컴포넌트를 생성하기 위해 TodoItem.jsx와 같이 jsx 파일을 생성하듯이, 자바에서는 클래스를 생성하기 위해 .java 파일 생성
class Mouse {
int age; // 쥐는 나이가 있음
}1-2. Mouse 클래스로 jerry 인스턴스 생성(인스턴스화)
class Mouse는 개발자가 직접 작성한 커스텀(Custom) 참조 타입 이라고 볼 수 있음
public static void main(String[] args) {
System.out.println(new Mouse()); // Mouse@0x100..
}1-3. 참조타입 Mouse 타입으로 참조변수 jerry 선언
참조 타입 Mouse으로 변수 jerry를 선언하였기 때문에 변수 jerry는 참조 변수가 됨
public static void main(String[] args) {
Mouse jerry;
}1-4. 참조변수 jerry에 new Mouse()으로 초기화
new는 인스턴스를 생성할 때 사용하는 연산자로,
new를 통해 생성된 객체는 메모리 공간 내에 생성된 고유한 인스턴스의 위치 정보인 주소 값(Reference value) 을 가지고 있음
public static void main(String[] args) {
jerry = new Mouse();
}1-5. 생성된 주소값이 참조 변수 jerry에 초기화됨
주소 값을 0x100이라고 가정할 때, 할당 연산자 = 에 의해 고유한 주소 값(0x100)이 참조 변수 jerry에 초기화됨
public static void main(String[] args) {
// ...
System.out.println(jerry); // Mouse@0x100
}1-6. jerry에게 이름 짓기
public static void main(String[] args) {
// ...
jerry.name = "제리"
}→ 참조 연산자( . dot)을 사용하여 name 필드에 접근, 문자열 값으로 초기화
1-7. jerry의 이름 확인 - 이름 필드에 접근하여 값 확인
public static void main(String[] args) {
// ...
System.out.println(jerry.name); // 제리
}→ 참조 연산자( . dot)을 사용하여 name 필드에 접근, 필드의 값 조회
이렇게 참조 변수 jerry를 통해 특정 객체의 필드나 메서드에 접근할 수 있는 것은 참조 변수 jerry에 주소값(0x100)이 저장되어 있기 때문이고,
이 주소값을 참조(Reference)하여 메모리 상에 존재하는 특정 인스턴스(객체)가 저장된 위치를 찾아가게 되는 것