본문 바로가기

Java/Java Language

[Java] 변수(Variable)

변수(Variable)란?

수학에서 변수는 변하는 수이지만, 프로그래밍에서는 데이터을 저장할 수 있는 메모리 공간이고 데이터는 변경이 가능하다. 하나의 변수에 단 하나의 값만 저장이 가능하므로, 새로운 값을 저장하면 기존의 값을 없어진다.


변수의 자료형 (Data Type of Variable)

변수는 데이터의 타입에 따라 데이터가 저장될 공간의 크기 저장 형식을 정의한 것이 자료형(Data Type)이다.


자료형에서 표현에 대한 종류는 크게 정수형(int, short, byte, long), 실수형(float, double), 문자형(char), 논리형(boolean)으로 구분된다.

 

자료형에서 저장 방식에 대한 종류는 기본형(Primitive Type)과 참조형(Reference Type)으로 구분된다. 정수형, 실수형, 문자형, 논리형은 기본형이고 나머지는 모두 참조형이다. 배열(Array), 문자열 타입(String)가 참조형의 대표적인 예이다. 기본형은 실제 데이터를 저장하고, 참조형는 데이터가 저장된 주소를 저장한다.


기본형 (Primitive Type)

이전에 설명하였지만, 기본형에는 크게 논리형, 문자형, 정수형, 실수형 4가지로 구분되며, 8가지의 타입이 있다. 그 중 할말이 많은 정수형(Integer)실수형(Floating Point)은 따로 블로그에 기재하였다.

종류 자료형 기본값 자료의 크기 저장 가능한 값의 범위 (각 타입의 값) 저장 가능한 값의 범위 (숫자)
논리형 boolean FALSE 1byte true/false  
문자형 char \u0000 2byte \u0000 ~ \uffff 0 ~ 65535
정수형 byte 0 1byte -128 ~ 127 -2⁷ ~ 2⁷-1
  short 0 2byte -32,768 ~ 32,767 -2¹⁵ ~ 2¹⁵-1
  int 0 4byte 약 ±20억 (Approximately 20 billion) -2³¹ ~ 2³¹-1
  long 0 8byte 약 ±92경 (Approximately 92 trillion) -2⁶³ ~ 2⁶³-1
실수형 float 0.0 4byte ±1.4E-45 ~ ±3.4028235E+38 (약 0 ~ ±340억 경) ±(1.40x10⁻⁴⁵ ~ 3.40x10³⁸)
  double 0.0 8byte ±4.9E-324 ~ ±1.7976931348623157E+308  ±(4.94x10⁻³²⁴ ~ 1.79x10³⁰⁸)

 

논리형 (boolean)

 

boolean은 조건식와 논리적 계산에 쓰인다. boolean은 true와 false 값만 표현하므로 1bit면 된다. 하지만 자바에서 가장 작은 데이터 단위가 1byte이다. 따라서 boolean 타입의 크기는 1byte이다. 또한 논리형인 boolean 다른 기본형과의 연산은 불가능하다.

 

문자형 (char)

문자도 결국엔 숫자로 저장된다. 문자 데이터는 모든 나라 문자 교환 집합인 유니코드(Unicode)를 사용한다. 따라서 정확히는 문자에 해당하는 유니코드(정수)가 저장된다. 그러므로 정수형과 실수형과의 연산도 가능하다.

 

char ch = 'A'는 char ch = 65와 같다. 값이 같기 때문에, 문자 리터럴('A') 대신에 유니코드(65)로 직접 저장이 가능하다. 그리고 문자로 저장된 변수의 유니코드를 알고 싶다면, int unicode = (int) ch; 같이 정수형 변환을 통해 알 수 있다. 유니코드에 대한 내용은 왜 1byte는 8bit일까?(ASCII, Unicode) 글에 설명되어있다. 자바는 내부적으로 UTF-16 인코딩 방식을 사용하여 2byte 문자체계를 사용하므로, char 또한 2byte이다.

 

정수형(Integer)

정수형에는 가장 많이 쓰기 때문에 여러가지 타입이 있다. 각 타입별로 저장공간의 크기가 다르다. 메모리 용량을 효율적으로 쓰기 위하여, int 보다 용량이 작은 byte나 short을 쓸 생각을 할 수 있다. 그러나 int 형이 CPU와 JVM에 최적화된 성능을 발휘하기 때문에 가장 많이 쓴다.

 

실수형 (Floating-Point)

float, double 모두 부동소수점(floating-point) 방식으로 저장한다. 메모리는 무한하지 않아, 무한 소수나 순환소수값을 모두 저장할 수 없다. 그러므로 저장장치에 저장된 실수에는 오차가 존재할 수 있다.

 

float는 수점 7번째 자리수 까진 정확하게 계산 가능하다. double은 float보다 두 배의 크기(8 byte)를 저장하므로 네이밍을 double로 하였다. 또한 double은 소수점 15번째 자리수 까진 정확하게 계산 가능하다. 따라서 연산시에 float보다 정확하므로 메모리가 부족하지 않는 경우에는, 일반적으로 double를 사용한다.


챰고 자료

  • 자바의 정석 (남궁성 지음)