Java
2013.12.28 09:39
3.6.3 참조 변수의 특징
조회 수 2021 추천 수 0 댓글 0
![](http://www.jabook.com/jabook2/images/upload/book/book_72/book_7288.png)
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을 할당한다.
이것이 내부에서 이루어지기 때문에 자바를 배우는 분들이 잘 모르고 지나칠 수도 있다. 여기서 정확하게 알아두기 바란다.
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
68 | Java | 1.4.5 그 외 데이터 타입 | IT장인 | 2013.11.21 | 72748 |
67 | Java | 3.5.3 private에 접근하는 방법 | IT장인 | 2013.12.28 | 5340 |
66 | Java | 3.5.5 private 멤버 필드를 사용하는 이유 | IT장인 | 2013.12.28 | 2595 |
» | Java | 3.6.3 참조 변수의 특징 | IT장인 | 2013.12.28 | 2021 |
64 | Java | 3.6.6 MotorCycle m = new MotorCycle() | IT장인 | 2013.12.28 | 1896 |
63 | Java | 3.6.2 참조값의 원리 | IT장인 | 2013.12.28 | 1605 |
62 | Java | 3.6.4 참조 변수끼리의 할당 | IT장인 | 2013.12.28 | 1487 |
61 | Java | 1.4.2 정수형과 실수형 메모리의 형태 | IT장인 | 2013.11.21 | 1442 |
60 | Java | 3.5.2 private의 접근과 컴파일 에러 | IT장인 | 2013.12.28 | 1415 |
59 | Java | 3.6.7 결론 | IT장인 | 2013.12.28 | 1323 |
58 | Java | 3.6.5 참조 변수의 타입 | IT장인 | 2013.12.28 | 1323 |
57 | Java | 3.5.1 접근제어란? | IT장인 | 2013.12.28 | 734 |