
프로그래밍에서 변수는 데이터를 저장하기 위한 메모리 공간을 의미합니다.
변수는 크게 일반 변수와 참조 변수로 나눌 수 있습니다.
이 두 가지 유형의 변수를 이해하는 것은 객체지향 프로그래밍에서 특히 중요합니다.
일반 변수(Primitive Variable)는 기본 데이터 타입을 저장하는 변수입니다.
일반 변수는 값을 직접 저장하며, 이러한 변수들은 메모리의 스택(Stack) 영역에 저장됩니다.
일반 변수는 다음과 같은 기본 데이터 타입을 가질 수 있습니다:
byte, short, int, longfloat, doublecharbooleanint a = 10; // 정수형 변수 a에 값 10을 저장 double b = 3.14; // 실수형 변수 b에 값 3.14를 저장 char c = 'A'; // 문자형 변수 c에 문자 'A'를 저장 boolean d = true; // 논리형 변수 d에 true를 저장
위 코드에서 a, b, c, d는 모두 일반 변수입니다.
각각의 변수는 자신의 타입에 맞는 값을 직접 저장하고 있습니다.
int는 4바이트, double은 8바이트 등).참조 변수(Reference Variable)는 객체의 메모리 주소를 저장하는 변수입니다. 참조 변수는 실제 데이터를 저장하는 것이 아니라, 데이터가 저장된 메모리 주소를 참조합니다. 객체나 배열과 같은 복합 데이터 타입은 모두 참조 변수를 사용하여 메모리에 저장됩니다. 참조 변수는 메모리의 힙(Heap) 영역에 저장된 객체를 가리키며, 참조 변수 자체는 스택(Stack) 영역에 저장됩니다.
String str = "ObjectTest"; // 문자열 객체를 가리키는 참조 변수 int[] arr = {1, 2, 3, 4, 5}; // 배열 객체를 가리키는 참조 변수
위 코드에서 str과 arr는 모두 참조 변수입니다.
str은 문자열 객체를, arr는 정수 배열 객체를 가리키고 있습니다.
int[] arr1 = {1, 2, 3}; int[] arr2 = arr1; // arr2는 arr1과 동일한 배열 객체를 가리킴 arr2[0] = 10; System.out.println(arr1[0]); // 출력: 10 System.out.println(arr2[0]); // 출력: 10
코드에서 arr1과 arr2는 동일한 배열 객체를 가리키고 있습니다.
따라서 arr2를 통해 배열의 첫 번째 요소를 변경하면, arr1을 통해서도 변경된 값을 확인할 수 있습니다.
| 구분 | 일반 변수 | 참조 변수 |
|---|---|---|
| 저장 내용 | 값 자체 | 객체의 메모리 주소 |
| 저장 위치 | 스택(Stack) 영역 | 스택(Stack) 영역 (참조), 힙(Heap) 영역 (객체) |
| 데이터 타입 | 기본 데이터 타입 (int, double 등) | 객체 타입 (String, 배열 등) |
| 메모리 사용 | 고정된 크기 | 참조 크기 고정, 객체 크기는 가변적 |
일반 변수와 참조 변수는 데이터 저장 방식과 메모리 사용 방식에서 큰 차이가 있습니다.
일반 변수는 값을 직접 저장하는 반면, 참조 변수는 객체의 주소를 저장합니다.
이러한 차이점은 객체 지향 프로그래밍에서 객체와 배열을 다룰 때 매우 중요합니다.