간단 지식/Java

02. 기본 타입 변수와 참조 타입 변수

납작한돌맹이 2020. 5. 8. 23:12
반응형

데이터 타입은 기본타입변수와 참조타입변수로 구분된다. 기본타입변수는 흔히 사용하는 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 영역이니 말을 했지만 실제로 자바에서 메모리가 어떻게 구성되는지 알아야 할 필요가 있다. 따라서 다음에는 메모리 영역에 대해 정리할 것이다.

 

(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )

반응형