1. 메모리란?
메모리는 현실세계의 땅과 같은 존재이다. 땅은 어떤한 것을 놓을 수 있는 공간이며, 메모리는 땅처럼 어떠한 것을 놓을 수 있는 공간을 말한다.
현실세계의 땅이 무한한 공간을 가질 수 없는 것 처럼, 메모리도 그 공간이 유한하다.
현실세계의 땅을 정부기관이 관리하는 것처럼, 컴퓨터 세계의 메모리는 운영체제가 관리한다. 운영체제는 나처럼 비전공자들도 익숙한 윈도우, 리눅스, 매킨토시 등이 있다.
이러한 운영체제는 컴퓨터세계에서 구동되는 각 프로그램들에게 메모리를 임대해준다. 그리고 각 프로그램들은 임대받은 메모리를 사용하다가 필요없게 될 경우 운영체제에게 다시 반납한다.
또 현실세계에서 땅의 각 구역이 주소를 갖고 있듯이, 메모리의 각 구역도 주소를 갖고 있으며 이를 통해 각 구역에 접근할 수 있다.
2. 변수
현실세계의 상자처럼 변수는 데이터를 담을 수 있는 공간을 말한다. 변수는 하나의 데이터만을 담을 수 있고, 담긴 데이터를 읽거나 접근할 수 있다.
변수는 담을 수 있는 데이터에 따라 종류가 다르며, 이것을 변수의 자료형이라고 한다.
현실세계의 상자에 이름, 종류, 크기가 있듯이, 변수에도 이름, 종류, 크기가 있다.
변수는 int a; 처럼 선언할 수 있다. 여기서 int는 자료형이며, a는 변수의 이름이다.
자료형은 변수가 담을 수 있는 데이터 종류와 변수의 크기를 결정해주는 역할을 한다.
변수를 선언할 때 주의 할 점이 있다.
- 변수명과 자료형이 필수로 작성되어야한다.
- 변수명이 숫자로 시작할 수 없다.
- _과 $를 제외한 특수문자는 변수명에 포함되어선 안된다.
변수에 값을 저장할 수 있으며, 이것을 할당이라고 한다.
값을 할당해주는 방법에는 2가지가 있다.
// 변수 선언과 할당을 동시에 하는 방법
int a = 2;
// 변수 선언 후, 할당하는 방법
int a;
a = 2;
변수를 선언하게 되면 변수에 공간 즉 메모리가 할당된다. 그리고 변수는 메모리 공간과 더불어 해당 메모리의 주소도 할당 받는다. 이 주소를 통해 변수의 값에 접근할 수 있다.
주의할 점은, 변수가 선언만되고 값이 할당되지 않는 경우에는 메모리가 할당되지 않는다는 것이다.
자바 변수의 기본 자료형(Primitive Type)은 아래의 표와 같다.
자료형 | 종류 | 크기 | 범위 | 기본값 |
byte | 정수 | 1 byte | -128 ~ +127 | 0 |
short | 정수 | 2 byte | -32,768 ~ +32,767 | 0 |
int | 정수 | 4 byte | -2,147,483,648 ~ +2,147,483,647 |
0 |
long | 정수 | 8 byte | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
0 |
float | 실수 | 4 byte | 약1.4E-045 ~ 3.4E+038 | 0.0 |
double | 실수 | 8 byte | 약4.9E-324 ~ 1.8E+308 | 0.0 |
char | 문자 | 2 byte | 0 ~ 65,535 (유니코드문자) | \u0000 |
boolean | 논리 | JVM dependent 컴퓨팅 시는 1 byte |
true(1)또는false(0) |
변수의 기본 자료형과 관련하여 알아두면 좋을 점들이 있다.
1) 정수 자료형은 int를 사용하는 것이 좋다.
- 일반적인 CPU는 int형 변수의 연산을 가장 고속으로 처리하도록 설계되어있다.
- -21억 ~ +21억 범위를 넘어가는 정수를 사용할 일은 거의 없다.
- byte, short는 int로 암시적 형변환이 일어나기 때문이다.
2) 실수를 저장하는 float와 double 자료형의 차이
//float는 값을 할당할 때, 값 뒤에 접미사 F를 작성해줘야한다.
//float는 소수점 6번째 자리까지 표현한다.
float num5 = 21.31231564456485F;
System.out.println(num5);
// => 21.312315
//double은 소수점 14번째 자리까지 표현한다.
double num6 = 21.312315344564857312;
System.out.println(num6);
// => 21.31231534456486
3) long 변수에 int 자료형의 범위를 초과하는 정수를 저장할 경우, 값에 접미사 L을 붙여야한다.
long num7 = 2134578784;
System.out.println(num7);
// => 2134578784
long num8 = 100000000000000000;
System.out.println(num8);
// => java: integer number too large: 100000000000000000
long num9 = 100000000000000000L;
System.out.println(num9);
// => 100000000000000000