본문 바로가기

JAVA 프로그래밍/공부

기본형 배열과 참조형 배열의 차이점


자바에서의 변수는 기본적으로, 기본형 또는 참조형 두 가지로 나눌수
있습니다.

기본자료형 변수는 정수형, 실수형, 문자형 등이 해당되며, 이런 기본
자료형 변수의 경우는 선언된 변수의 메모리내에 직접 데이터가 기록
되는 형태입니다.

반면 자바에서 참조자료형 변수는 기본자료형을 제외한 모든 클래스
형태의 변수가 여기에 해당됩니다. 문자열(String) 또한 String 클래스
의 객체로써 참조자료형 변수에 해당되며, 모든 배열 또한 자바에서는
객체의 형태(참조자료형 변수)로 처리합니다.

이런 참조자료형 변수가 기본자료형 변수와 다른 중요한 차이점은,
기본자료형 변수가 직접 데이터를 메모리내에 가지고 있는것과 다르게,
참조자료형 변수는 데이터를 해당 메모리내에 직접 가지고 있는 것이
아니라, 해당 자료가 기록된 메모리의 주소값을 가지고 있게 됩니다.

만약 C언어를 알고 계신다면, 이런 참조자료형 변수는 C언어에서의
포인터에 해당하게 됩니다.

이해를 돕기 위해 간단한 예를 하나 들어보겠습니다.

예를 들어서, 제 지갑(변수)에 지금 현재 1000원(데이터)이 들어 있다고
가정합니다. 그러면 현재 제 지갑(변수)은 1000원(데이터)이 직접 들어
있는 형태이기 때문에, 이런 경우 기본자료형 변수에 해당됩니다.

하지만 만약, 제 지갑(변수)에 현재 1000원(데이터)은 들어 있지 않지만,
장롱 서랍속에 들어있는 100,000원에 대한 메모지가 들어 있다고 가정합
니다. 이러한 경우 제 지갑(변수)은 직접 100,000원(데이터)이 들어 있
지는 않지만, 들어있는 메모지(메모리의 주소값)를 보면 언제든지 장롱
서랍속의 100,000원에 대한 위치를 알수 있으므로, 실제로는 100,000원
을 가지고 있는 효과와 동일하다고 할 수 있습니다. 이러한 경우 제
지갑(변수)은 참조 자료형 변수가 됩니다. 직접 데이터를 저장하지 않고
데이터가 저장된 메모리의 주소값을 가지고 있는 형태이죠.

그렇다면, 왜 복잡하게 기본형, 참조형을 나누어 놓았을까? 라는 의문을
가질 수도 있습니다. 그 이유는 간단합니다.

예를 들어서, 정수 1이라는 데이터가 1000개 들어 있는 배열이 있다고
가정해 봅시다. 그리고 이 배열 데이터는 기본자료형의 형태로 저장되
어 있다고 가정한다면, 이 자료를 함수의 파라메터로 이곳, 저곳으로
이동을 한다면, 이동 할 때 마다 1000개의 모든 데이터를 일일이 복사를
해야하는 부담이 생깁니다.

하지만 이것을 참조자료형으로 저장을 하고 있다면, 함수의 파라메터로
넘길때, 매번 복사를 해야하는 리소스낭비에서 벗어나 단지, 메모리 주소
하나만을 넘김으로써 간단하게 해결될 수 있습니다.

장점은 이 뿐만이 아닙니다.

만약 함수 a에서 함수 b로 기본자료형의 형태로 자료를 넘겼다면, 이는
복사를 한 상태로 넘기는 것이 되므로, 함수 b에서 이 자료에 변경을
가한다면, 함수 a에서는 이 자료변경에 대해 전혀 영향을 받을 수 없습
니다.(복사를 해서 넘겨 졌으므로, 두 함수에서 따로따로 자료를 가지고
있는 형태) 하지만 함수 b가 호출된 다음 변경된 값이 함수 a에도 영향
을 받아야 한다면, 다시한번 함수b가 끝나는 시점에서 리턴값을 되돌려
받아야 합니다. 상당히 비효율적이죠.

하지만 참조자료형의 형태로 넘긴다면, 원래의 데이터가 위치한 메모리
블록은 고정된 값이고, 다만 이에대한 주소값을 넘김으로, 함수 a와
함수 b는 결국 값은 메모리 주소에 대해서 자료 변형을 가하게 됩니다.
간단하게 메모리 주소를 넘김으로써, 함수 a가 리턴값을 받는 번거로움
까지도 한번에 해결되는 것이죠.

이 예를 가지고 함수 호출의 방식을 크게 다음과 같이 두가지로 나눕니다.
기본자료형의 형태로 호출 : Call By Value
참조자료형의 형태로 호출 : Call By Reference

간단하게 답변을 한다는 것이, 이해를 돕느라 답변이 길어 졌군요.
어쨌든 위의 설명들만 이해 한다면, 기본자료형, 참조자료형에 대해서는
확실히 이해가 되실 것이라 생각됩니다. 그럼 이만..

출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10106&docid=1189092&qb=7J6Q67CUIOq4sOuzuO2YlSDrsLDsl7Q=&enc=utf8&section=kin&rank=2&sort=0&spq=0&pid=fwgxXv331xhssch5kYossv--075562&sid=SwTxuHHfBEsAAFgOGAw