기본형과 참조형(1)
자바에서 참조형을 제대호 이해하는 것은 정말 중요합니다.
변수의 데이터 타입을 가장 크게 보면 기본형과 참조형으로 분류할 수 있습니다.
- 사용하는 값을 변수에 직접 넣을 수 있는 기본형
-
이전 포스팅의 예시 코드에서 본
Student student1
과 같이 객체가 저장된 메모리의 위치를 가르키는 참조값을 넣을 수 있는 참조형으로 분류할 수 있습니다. -
기본형(Primitive Type)
-
Int
,long
,double
,boolean
처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 “기본형” 이라고 합니다.
-
-
참조형(Reference Type)
-
Student student1
,int[] students
와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 “참조형” 이라고 합니다.- 참조형은 객체 또는 배열에 사용됩니다.
-
쉽게 이야기해서 기본형 변수에는 직접 사용할 수 있는 값이 들어있지만 참조형 변수에는 위치(참조값)이 들어가 있습니다.
참조형 변수를 통해서 뭔가 하려면 결국 참조값을 통해 위치로 이동해야 합니다.
기본형 vs 참조형 - 기본
-
“기본형” 은 숫자
10
,20
과 같이 실제 사용하는 값을 변수에 담을 수 있습니다.- 때문에 해당 값을 바로 사용할 수 있습니다.
-
“참조형” 은 실제 사용하는 값을 변수에 담는 것이 아닙니다.
- 이름 그대로 실제 객체의 위치(참조, 주소)를 저장합니다.
- 참조형에는 객체와 배열이 있습니다.
-
“객체” 는
.(dot)
을 통해서 메모리 상에 생성된 객체를 찾아가야 사용할 수 있습니다. -
“배열” 은
[]
를 통해서 메모리 상에 생성된 배열을 찾아야가 사용할 수 있습니다.
-
“객체” 는
- 참조형에는 객체와 배열이 있습니다.
- 이름 그대로 실제 객체의 위치(참조, 주소)를 저장합니다.
기본형 vs 참조형 - 계산
- 기본형은 들어있는 값을 그대로 계산에 사용할 수 있습니다.
- 예) 더하고 빼고, 사용하고 등등,(숫자 같은 것들은 바로 계산할 수 있습니다.)
- 참조형은 들어있는 참조값을 그대로 사용할 수 없습니다.
- 주소지만 가지고는 할 수 있는게 없습니다.
- 주소지에 가야 실체가 있기 때문입니다.
- 예) 더하고 빼고 사용하고를 못합니다. 참조값만 가지고는 계산할 수 있는 것이 없습니다.
“기본형은 연산이 가능하지만 참조형은 연산이 불가능합니다.”
int a = 10, b = 20;
int sum = a + b;
- 기본형은 변수에 실제 사용하는 값이 담겨있습니다.
- 따라서
+
,-
와 같은 연산이 가능합니다.
- 따라서
Student s1 = new Student();
Student s2 = new Student();
s1 + s2 // 오류 발생.
- 참초형은 변수에 객체의 위치인 참조값이 들어있습니다.
- 참조값은 계산에 사용할 수 없습니다. 따라서 오류가 발생합니다.
“물론 다음과 같이 .(dot)
을 통해 객체의 기본형 멤버 변수에 접근한 경우에는 연산을 할 수 있습니다.”
Student s1 = new Student();
s1.grade = 100;
Student s2 = new Student();
s2 grade 90;
int sum = s1.grade + s2.grade // 연산 가능
쉽게 이해하는 팁
“기본형을 제외한 나머지는 모두 참조형입니다.”
- 기본형은 소문자로 시작합니다.
-
int
,long
,double
,boolean
모두 소문자로 시작합니다.- 기본형은 자바가 기본으로 제공하는 데이터 타입입니다.
- 이러한 기본형은 개발자가 새로 정의할 수 없습니다.
- 개발자는 참조형인 클래스만 직접 정의할 수 있습니다.
-
- 클래스는 대문자로 시작합니다.
-
Student
,String
, 등…- 클래스는 모두 참조형입니다.
-
“참고 - String”
자바에서String
은 특별합니다.
String
은 사실 클래스입니다. 즉, 참조형입니다.
그런데 기본형처럼 문자 값을 바로 대입할 수 있습니다.
문자는 매우 자주 다루기 때문에 자바에서 특별하게 편의 기능을 제공합니다.
String
에 대한 자세한 내용은 추후에 설명하겠습니다.