본문 바로가기

Java/Java

메모리, 변수

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

 

'Java > Java' 카테고리의 다른 글

연산자  (0) 2021.09.19
타입 변환  (0) 2021.09.14
인터페이스  (0) 2021.06.15
상속  (0) 2021.06.08
자바 API  (0) 2021.06.06