Contents

Java
2013.12.28 09:39

3.6.3 참조 변수의 특징

조회 수 1109 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


3.6.3 참조 변수의 특징

참조 변수의 개념을 이해하는 것은 아주 [중요]하다. 자바를 이해하는데 있어서 클래스를 이해하는 것만큼이나 중요한 것이 바로 참조 변수다. 클래스를 이해할 수 없으면 객체지향 프로그램을 아예 할 수도 없다. 그리고 클래스의 개념을 안다손 치더라도 참조 변수의 개념을 깨닫지 못한다면 자바 프로그램이 상당히 난해해진다.

□ 참조값(Reference Value)
◇ 참조값이란 객체의 메모리를 생성했을 때 메모리와 연결된 유일한 숫자값을 말한다.
◇ 이 숫자값을 참조 변수가 받으며, 자바에서는 참조값을 가지고 있으면 해당 객체를 핸들할 수 있다.
◇ 참조값으로 작업하면 내부에서 참조값에 연결된 메모리로 작업하는 것과 같은 효과가 있다.

객체를 만들면 자바를 실행시켜 주는 시스템 내에서 객체의 실제 주소에 연결된 숫자 하나를 던져 준다. 이 숫자를 객체가 받아 챙기게 되며, 객체는 이 숫자(참조값)를 이용해서 해당 객체의 메모리에 값을 할당하거나 메서드를 호출할 수 있다.

☞ 참조값을 위한 메모리와 new했을 때의 메모리
객체를 하나 생성하게 되면 두 종류의 메모리가 만들어진다. 자바에서 하나의 객체를 생성하면 객체 변수를 위한 공간 즉 참조값을 저장하기 위한 공간과 new했을 때 힙영역에 생성되는 객체 자체의 메모리 공간이 만들어진다.


참조 변수는 4바이트짜리 정수값이다. 그렇기 때문에 객체의 메모리를 할당할 때 4바이트의 정수값을 객체 변수에 할당하게 되는 것이다. 다음과 같이 메모리 없는 객체 변수를 선언했다고 가정하자. 이것이 무엇을 의미하는지 생각해보기 바란다.

□ 의미 I
◇ Sun s1 = null;

단순히 메모리 없는 객체 변수를 선언한 것일까? 이제 참조의 의미를 배웠으니 다음과 같이 해석해야 한다.

□ 'Sun s1 = null'의 의미
◇ s1은 4바이트짜리 참조 변수가 만들어진 것이다.
◇ s1 자체는 4바이트의 메모리 생성의 의미를 담고 있다.
◇ s1은 현재 4바이트의 메모리에 null값이 들어 있다.
◇ s1에는 객체의 실제 메모리와 연결된 Sun형의 참조값을 넣을 수 있다.

참조 변수가 만들어졌다면 다음 구문을 해석해보기 바란다.

□ 의미 II
◇ s1 = new Sun();

s1이라는 변수에는 참조값을 받을 수 있다. 그리고 new Sun()이라고 했을 때 객체의 메모리가 생성되고 참조값이 만들어진 후 s1에 할당되는 것이다. s1이라는 참조 변수는 아무것도 아니다. 단순히 정수형 숫자를 담을 수 있는 4바이트짜리 메모리라는 것을 잊지 말기 바란다.

그렇다면 실제 참조값을 누가 만드는가?라는 질문을 할 것이다. new를 이용해서 객체를 생성했을 때 자바 시스템 내부에서 자동으로 참조값을 만들어 준다. 즉 전자동이라는 의미이다.

마지막으로 다음 구문을 해석해보기 바란다.

□ 의미 III
◇ s1.distance = 1000;

이 구문을 참조 변수와 연결해서 해석해보면, 다음과 같은 절차에 의해서 값이 객체 s1과 연결된 메모리로 할당될 것이다.

□ 's1.distance = 1000'의 의미
◇ s1에는 참조값이 할당되어 있다.
◇ s1의 참조값과 연결된 주소를 검색하기 위해서는 자바 시스템 내부의 인덱스 테이블을 검색한다.
◇ s1의 참조값에 연결된 주소를 인덱스 테이블에서 찾았다면 해당 메모리에 distance의 자리를 찾는다.
◇ s1의 [참조값]-[메모리]-[distance]를 찾았다면 데이터 1000을 할당한다.

이것이 내부에서 이루어지기 때문에 자바를 배우는 분들이 잘 모르고 지나칠 수도 있다. 여기서 정확하게 알아두기 바란다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
68 Java 3.6.7 결론 IT장인 2013.12.28 419
67 Java 3.6.6 MotorCycle m = new MotorCycle() IT장인 2013.12.28 895
66 Java 3.6.5 참조 변수의 타입 IT장인 2013.12.28 512
65 Java 3.6.4 참조 변수끼리의 할당 IT장인 2013.12.28 535
» Java 3.6.3 참조 변수의 특징 IT장인 2013.12.28 1109
63 Java 3.6.2 참조값의 원리 IT장인 2013.12.28 641
62 Java 3.6.1 객체의 메모리 생성 IT장인 2013.12.28 307
61 Java 3.5.5 private 멤버 필드를 사용하는 이유 IT장인 2013.12.28 1862
60 Java 3.5.4 private의 사용 이유 IT장인 2013.12.28 277
59 Java 3.5.3 private에 접근하는 방법 IT장인 2013.12.28 2207
58 Java 3.5.2 private의 접근과 컴파일 에러 IT장인 2013.12.28 666
57 Java 3.5.1 접근제어란? IT장인 2013.12.28 472
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6