1. 변수(Variable)와 리터럴(Literal)
프로그래밍에서 데이터를 다루는 것은 가장 중요한 것 중 하나입니다. 어떠한 작업을 수행하기 위해 관련된 데이터를 입력받아 처리하고 결과를 출력하는 과정이 필요합니다.
리터럴(Literal)은 "문자로 표현된 데이터"
를 의미합니다.(94, 100과 같은 숫자가 바로 리터럴입니다.) 이러한 리터럴은 데이터가 가진 의미를 전달하기엔 불완전하기에 우리는 변수라는 또 다른 무언가를 사용하여 데이터를 관리하고 있습니다.
1.1 변수(Variable)
변수는 영어로 Variable입니다. Variable의 어원을 살펴보면 "변하기 쉬운, 변할 수 있는"
이라는 뜻을 가지고 있습니다. 프로그래밍에서도 변수란 변할 수 있는 데이터를 저장하는 공간입니다. 정확히 말하면 데이터를 저장하기 위해 프로그램에 의해 할당받은 메모리 공간입니다.
다루는 데이터의 종류도 여러 가지이기 때문에 데이터를 담는 그릇인 변수의 타입도 여러 가지일 필요성이 있습니다.(데이터의 종류에 따라 담는 데이터의 크기가 달라지기 때문이죠.)
1.2 변수의 선언
Java에서 변수를 선언하는 방식은 다음과 같습니다.
- 데이터 타입 : 변수에 저장할 데이터의 종류를 명시합니다.
- 변수명 : 변수를 식별하는 데 사용되는 이름입니다.
- 리터럴 : 변수에 저장될 실제 데이터 값입니다.
- 대입 연산자 : 변수에 값을 저장할 때 사용되는 연산자입니다.
1.3 변수의 종류
변수에 저장되는 값은 정수, 실수, 문자와 순수한 데이터일 수도 있고 다른 메모리를 참조할 수 있는 메모리 주소값일 수 있습니다. Java에서는 이러한 두 가지 경우를 기본 타입(Primitive Type)
, 참조 타입(Reference Type)
변수로 분류하고 있습니다.
2. 기본 타입(Primitive Type)
기본 타입은 실제 데이터 값을 가지는 데이터 타입입니다. 크게 정수형, 실수형, 논리형, 문자형으로 분류할 수 있고 데이터의 크기, 범위에 따라 나뉩니다. 또한 기본 타입이 지역변수, 매개변수로 선언되면 변수와 그 값은 Stack
에 저장됩니다.
public class Main{
public static void main(String[] args){
int n = 10;
double m = 3.3;
}
}
위 코드와 같이 메소드 안에 선언된 기본타입 변수는 Stack에 저장되고 메소드 실행이 완료되면 Stack Frame과 같이 소멸됩니다.
2.1 기본타입의 크기, 기본값, 범위
타입 | 메모리 크기 | 기본값 | 범위 |
boolean | 1 byte | false | true | false |
byte | 1 byte | 0 | -128 ~ 127 |
short | 2 byte | 0 | -32,768 ~ 32767 |
int | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 |
long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float | 4 byte | 0.0F | (3.4 X 10^-38) ~ (3.4 X 10^38)의 근사값 |
double | 8 byte | 0.0 | (1.7 X 10^-308) ~ (1.7 X 10^308)의 근사값 |
char | 2 byte | '\u0000' | 0 ~ 65536 |
3. 참조타입
단일 데이터를 나타내는 기본타입과 달리 자바에서는 여러 데이터들의 묶음을 한번에 다루는 기능이 필요할 때가 있습니다. 참조 타입은 배열, 클래스, 열거형, 인터페이스와 같이 여러 개의 단일 데이터들로 이루어진 데이터를 가리키는 변수입니다. 참조 타입은 기본 타입과 달리 데이터를 직접 저장하지 않고, 데이터가 저장된 메모리 주소
를 저장하고 데이터 참조시 해당 주소를 통해 접근합니다.
public class Main{
public static void main(String[] args){
int[] a = new int[10];
String b = new String("hello");
}
}
참조 변수도 Stack
에 저장되긴 하지만 데이터 값이 아닌 주소값이 저장됩니다. 실제 데이터는 Heap
라는 특수한 메모리 영역에 생성됩니다.
3.1 참조타입의 크기, 기본값
타입 | 기본값 | 메모리 크기 |
배열(Array) | Null | 4 byte (주소값이 저장되기 때문에 동일함) |
클래스(Class) | ||
인터페이스(Interface) | ||
열거형(enum) |