데이터 타입은 기본타입변수와 참조타입변수로 구분된다. 기본타입변수는 흔히 사용하는 int, char, double 등을 말하며 정수, 실수, 논리 타입으로 구성된다. 참조타입변수는 객체지향인 자바에서 볼 수 있는 특징으로 배열타입, 열거타입, 클래스, 인터페이스로 구성된다. 이 둘의 차이점은 무엇을 값으로 갖는지이다. 기본타입변수는 말 그대로 값을 저장하며, 참조타입변수는 메모리 번지(주소)를 값으로 갖는다.
자바에서 생성되는 메모리에는 일단 stack영역과 heap영역이 존재한다는 것을 알아두자. 변수가 선언되면 해당 변수는 stack영역에, 객체는 heap 영역에 생성된다.
예를 들어
int age = 23;
String name = "KSH";
int[] num = {1, 2, 3};
이란 코드가 실행되면 메모리 영역은 다음과 같을 것이다.
변수 age는 기본타입이므로 heap영역에 참조할 객체가 생성되지 않는다. 반면에 name과 num은 참조타입변수이기 때문에 변수가 가진 값은 주소 값인 100, 200이다. 그리고 그 주소를 이용해서 heap 영역에 생성된 객체를 참조해 객체에 저장된 값을 활용할 수 있게 된다.
값을 비교하는 연산자는 == 또는 != 이다.
int num1 = 3;
int num2 = 4;
라면, num1 == num2 의 결과는 false 이다. 그렇다면 참조타입변수 간의 비교는 어떨까?
int형 배열 3개가 다음과 같이 있다고 가정해보자.
int num1[] = {1,2,3};
int num2[] = {1,2,3};
int num3[] = {1,2,3};
그리고 메모리 영역이 아래 그림처럼 조직되었다고 한다면,
num1 == num2 의 결과는?
num2 == num3 의 결과는?
num1 != num3 의 결과는?
쉬운 문제니까 다들 답을 낼 수 있을 것이다. 답이 궁금한 사람은 언제든지 댓글로 물어보길 바란다.
간단하게 변수를 가지고 메모리 영역에 어떻게 값이 저장되는지 확인해봤다. stack 영역이니, heap 영역이니 말을 했지만 실제로 자바에서 메모리가 어떻게 구성되는지 알아야 할 필요가 있다. 따라서 다음에는 메모리 영역에 대해 정리할 것이다.
(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )
'간단 지식 > Java' 카테고리의 다른 글
알아두면 편한 메소드 (0) | 2020.05.26 |
---|---|
05. main 메소드의 매개값 - String[] args (0) | 2020.05.26 |
04. 참조타입변수 - String, 배열, 열거 (0) | 2020.05.10 |
03. Java의 메모리 영역 간단정리 (0) | 2020.05.10 |
01. 자동타입변환과 강제타입변환 (0) | 2020.05.01 |