본문 바로가기
Java 강의

자바의 변수 / 기본 타입과 참조 타입 / 메모리의 힙영역과 스택영역

by 자유코딩 2017. 9. 14.

이번 글에서는 변수 , 기본타입과 참조 타입 , 메모리의 힙영역과 스택영역에 대해서 알아보도록 하겠습니다.

 

변수의 정의는 다음과 같습니다.

 

변수 : 하나의 값을 저장할 수 있는 메모리 공간 , 프로그램이 사용하는 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간

 

 

변수를 사용하는 이유는 프로그램에 의해서 값이 수시로 변하기 때문입니다.

 

프로그램이 사용하는 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간을 변수라고 합니다.

 

프로그램을 작성할때 변수를 선언하면 데이터 타입에서 정한 크기의 메모리를 할당합니다.

 

●변수의 사용

 

자바에서 변수는 다음과 같이 사용합니다.

 

변수에 값을 저장하고 읽는 행위

변수의 선언 = 메모리 상에 하나의 값을 저장 할 수 있는 메모리 공간을 할당하는 것을 말합니다.

 

변수의 선언 : 변수의 타입 다음에 변수 이름을 적어서 변수를 선언

 

 

변수의 초기화 : 변수에 처음으로 값을 넣어 주는 것

int price =1000;

 

리터럴 : x=100; 에서 100과 같이 소스코드에 쓰여있는 값입니다.

 

 

변수에 값을 저장하는 모습입니다.

변수의 이름은 식별자의 일종입니다.

식별자 = 저장 공간을 구별하는 이름

 

변수 이름을 짓는데는 규칙이 있습니다.

 

 변수 이름은 유니코드 문자와 숫자의 조합

 변수 이름의 첫 문자는 일반적으로 유니코드 문자

 두 번째 문자부터는 문자 , 숫자 , _ , $ 등이 가능하다

 대문자와 소문자는 구별된다

 식별자의 이름으로 키워드를 사용해서는 안된다

 

 

자바에는 두 가지 타입의 변수가 있습니다.

 

첫 번째는 기본 타입 입니다.

 

●기본 타입 (Primitive type)

 

 정수 타입

 byte / short / int / long

 실수 타입

 float / double

 논리 타입

 boolean

 문자 타입

 char 

 

아래 표에 기본 타입의 변수들의 크기와 범위를 정리하였습니다.

 

공부하시는데 도움이 되었으면 좋겠습니다.

 

 타입

 크기

 범위

 기본 값

 byte

 1 byte

 -128 ~ 127

 0

 short

 2 byte

 -32768 ~ 32767

 0

 int

 4 byte

 -2147483648 ~ 2147483647

 0

 long

 8 byte

 -9223372036854775808 ~ 9223372036854775807

 0

 float

 4 byte

 -3.4028235E38 ~ +3.4028235E38

 0.0

 double

 8 byte

 -1.7976931348623157E308~ +1.7976931348623157E308

 0.0

 boolean

 1 byte

 false , true

 false
 char

 2 byte

 0~65535

 \u0000

 

여기서 정수 형 변수는 여러개가 있는데요.

 

이 중에서 long은 수치가 큰 데이터를 다루는 프로그램에서 사용합니다.

 

두번째는 참조 타입입니다.

 

●참조 타입 (Reference type)

 

참조 타입은 위에 표에 정리된 기본형을 제외한 나머지 모두를 말합니다.

 

참조 타입 변수는 자바에서 객체의 주소를 저장하는 변수입니다.

 

 

그림의 u1 은 참조 타입 변수의 예시입니다.

 

u1에는 객체 use 의 주소가 저장됩니다.

 

u1에 저장된 use 객체의 주소를 통해서 use 객체를 참조할 수 있습니다.

 

u1과 같은 참조변수도 메모리 스택에 저장이 됩니다.

 

다만, u1에는 use 객체의 주소가 저장이 되기 때문에 u1 객체를 이용해서 use 클래스의 메소드나 변수를 사용 할 수 있습니다.

 

메모리의 힙(Heap) 영역과 스택(Stack) 영역은 자바가상머신(Java Virtual Machine)에서 사용되는 메모리 영역중 일부를 말합니다.

 

덧붙임. 메소드 영역

메소드와 클래스 데이터를 저장하기 위한 공간

힙 영역

동적으로 할당하여 사용 할 수 있는메모리

주로 Runtime으로 생성되는 객체를 저장

스택 영역

메소드의 매개변수, 지역변수, 임시변수를 저장하기 위한 스택 구조의 메모리

 

●정적 메모리 스택(Stack) 영역

  • 스택 영역에는 기본타입 변수가 할당되고 변수의 실제 값들이 저장됩니다.

  • 기본 타입 변수들은 표와 같이 크기가 정해져 있습니다.

  • 메모리에 정적으로 할당되고 컴파일 된다.

  • 객체 안의 메소드의 작업이 종료되면 할당되었던 메모리 공간은 반환되어 비워집니다.

●동적 메모리 힙(Heap) 영역

  • 힙 영역에는 객체와 배열이 생성됩니다. 그리고 참조타입(배열, 클래스, 인터페이스 등) 들의 주소를 저장합니다.

  • 기본타입 변수들과는 다르게 크기가 정해져 있지 않습니다.

  • 프로그램 실행시 메모리에 동적으로 할당됩니다.

  • 참조하는 변수가 없으면 자바의 가비지 컬렉터가 제거합니다.

※Garbage collector ( 가비지 컬렉터 )메모리의 힙영역에 할당된 더 이상 사용되지 않는 객체를 제거 하는 역할을 합니다.

이렇게 객체를 제거하며 메모리가 관리됩니다.

 

설명이 부족한 부분은 없으셨나요? 댓글이나 이메일로 질문해주시면 답변 드리겠습니다. 감사합니다.

 

이메일 : jswoo030@gmail.com

댓글