Skip to Content
Suffering builds character

3. 참조

우리는 일반적으로 기차를 탔을 때, 승차권을 보고 좌석을 찾아감 reference-example

참조(參照)의 사전적 의미

“참고로 비교하고 대조하여봄”

기차표 티켓을 보고 자신의 좌석을 찾아감

기차표 티켓(참조 변수)보고(참조하여) 자신의 좌석을 찾아감

주소 값이 담긴 참조 변수참조하여 자신의 좌석(객체의 정보) 을 찾아감

주소 값이 담긴 참조 변수를 참조하여 객체의 정보를 찾아감

1. 참조 타입, Reference type

자바에서 데이터 타입은 크게 기본 타입과 참조 타입으로 구분함

class 키워드를 통해 생성된 객체(인스턴스)의 타입은 참조 타입(Reference type)

1-1. Mouse라는 가상의 쥐 클래스 작성

리액트에서는 컴포넌트를 생성하기 위해 TodoItem.jsx와 같이 jsx 파일을 생성하듯이, 자바에서는 클래스를 생성하기 위해 .java 파일 생성

Mouse.java
class Mouse { int age; // 쥐는 나이가 있음 }

1-2. Mouse 클래스로 jerry 인스턴스 생성(인스턴스화)

class Mouse는 개발자가 직접 작성한 커스텀(Custom) 참조 타입 이라고 볼 수 있음

Main.java
public static void main(String[] args) { System.out.println(new Mouse()); // Mouse@0x100.. }

1-3. 참조타입 Mouse 타입으로 참조변수 jerry 선언

참조 타입 Mouse으로 변수 jerry를 선언하였기 때문에 변수 jerry는 참조 변수가 됨

Main.java
public static void main(String[] args) { Mouse jerry; }

1-4. 참조변수 jerry에 new Mouse()으로 초기화

new는 인스턴스를 생성할 때 사용하는 연산자로,

new를 통해 생성된 객체는 메모리 공간 내에 생성된 고유한 인스턴스의 위치 정보인 주소 값(Reference value) 을 가지고 있음

Main.java
public static void main(String[] args) { jerry = new Mouse(); }

1-5. 생성된 주소값이 참조 변수 jerry에 초기화됨

주소 값을 0x100이라고 가정할 때, 할당 연산자 = 에 의해 고유한 주소 값(0x100)이 참조 변수 jerry에 초기화됨

Main.java
public static void main(String[] args) { // ... System.out.println(jerry); // Mouse@0x100 }

1-6. jerry에게 이름 짓기

Main.java
public static void main(String[] args) { // ... jerry.name = "제리" }

→ 참조 연산자( . dot)을 사용하여 name 필드에 접근, 문자열 값으로 초기화

1-7. jerry의 이름 확인 - 이름 필드에 접근하여 값 확인

Main.java
public static void main(String[] args) { // ... System.out.println(jerry.name); // 제리 }

→ 참조 연산자( . dot)을 사용하여 name 필드에 접근, 필드의 값 조회

이렇게 참조 변수 jerry를 통해 특정 객체의 필드나 메서드에 접근할 수 있는 것은 참조 변수 jerry에 주소값(0x100)이 저장되어 있기 때문이고,

이 주소값을 참조(Reference)하여 메모리 상에 존재하는 특정 인스턴스(객체)가 저장된 위치를 찾아가게 되는 것

실습: Visualizer를 통해 직접 작성 및 확인

Last updated on