Contents

Java
2013.12.28 09:39

3.6.3 참조 변수의 특징

조회 수 1634 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
8 Java 3.5.5 private 멤버 필드를 사용하는 이유 IT장인 2013.12.28 2534
7 Java 3.6.1 객체의 메모리 생성 IT장인 2013.12.28 535
6 Java 3.6.2 참조값의 원리 IT장인 2013.12.28 1227
» Java 3.6.3 참조 변수의 특징 IT장인 2013.12.28 1634
4 Java 3.6.4 참조 변수끼리의 할당 IT장인 2013.12.28 1104
3 Java 3.6.5 참조 변수의 타입 IT장인 2013.12.28 1122
2 Java 3.6.6 MotorCycle m = new MotorCycle() IT장인 2013.12.28 1439
1 Java 3.6.7 결론 IT장인 2013.12.28 949
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6