[Java] 자바 변수의 종류와 자료형 완벽 정리
문서용 주석.
/**
*/
자바의 4가지 변수
지역변수 | 매개변수 | 인스턴스변수 | 클래스변수 |
{} 중괄호 내에 선언된 변수. | 메소드나 생성자에 넘겨주는 변수. | 클래스 안에, 메소드 밖에 선언된 변수. static 키워드 없음. | 클래스 안에, 메소드 밖에 선언된 변수. static 키워드 있음. |
지역변수를 선언한 중괄호 내에서만 유효. | 메소드 호출될 때 생명 시작, 메소드 끝나면 소멸. | 객체가 생성될 때 생명 시작, 그 객체를 참조하는 다른 객체가 없을 때 소멸. | 클래스가 생성될 때 생명 시작, 자바 프로그램이 끝날 때 소멸. |
클래스는 상태와 행위가 있다.
EX) 자동차
- 정지중.
- 10km/h로 이동중.
- 512km를 주행중.
클래스와 객체
new 연산자와 클래스의 생성자를 이용하여 객체를 생성한다.
클래스는 대부분 그 자체만으로 일할 수 없고 객체를 생성해야 일을 시킬 수 있다.
(클래스 변수는 객체 생성 없이 클래스명으로 접근.)
자바의 2가지 자료형
기본형 초기화할 때 값을 바로 적음
참조형 new 키워드 사용하여 초기화
* String만 예외. 값을 통해 초기화 가능하지만 참조형.
기본형
정수형 / 소수형 / boolean
정수형(char는 가장 아래에서 설명한다.)
타입 | 최소 | 최대 |
byte |
-2^7 ------------------------------------ -128 |
2^7-1 ------------------------------------ 127 |
short |
-2^15 ------------------------------------ -32,768 |
2^15-1 ------------------------------------ 32767 |
int |
-2^31 ------------------------------------ -2,147,483,648 |
2^31-1 ------------------------------------ 2,147,483,647 |
long |
-2^63 ------------------------------------ -9,223,372,036,854,775,808 |
2^63-1 ------------------------------------ 9,223,372,036,854,775,807 |
char |
------------------------------------ 0 |
2^16-1 ------------------------------------ 65,535 |
컴퓨터는 0과 1만 안다. 전기신호가 있을 땐 1, 전기신호가 없을 땐 0이다. 따라서 컴퓨터가 이해하는 기계어는 0과 1을 가진 2진수로 표현한다. 2진수 1자리는 비트이고, 8비트의 부호가 있는 타입(signed type)을 byte라고 한다. 8비트 중 가장 왼쪽의 비트는 부호를 나타낸다. 0이면 양수이고 1이면 음수가 된다. 따라서 위에 표를 보면, 바이트는 8비트 중 부호비트를 제외하고 7비트로 표현하기 때문에 2^7-1이 된다. 그런데 왜 음수는 -128일까? 아래를 보면 +0이든 -0이든 둘 다 0이다.
0000 0000
1000 0000
언뜻 보기에 둘 다 0인 것 같지만 위는 0, 아래는 -128이다. 다시 말하면, byte, short, int, long 타입의 가장 앞의 값만 1인 것은 해당 타입의 최소값이고, 두 번째 값부터 1로 채워져 있으면 해당 타입의 최대값이다. 값을 하나라도 더 표현하기 위해 이런 방법을 사용했다. 절대값만으로 따지면, 최소값이 최대값보다 딱 1이 더 크다.
byteMin = -128
byteMax = 127
byteMin--;
byteMax++;
위와 같은 프로그램을 실행하면,
최소값에서 1을 더 뺀 것은 최대값이 나오고,
최대값에서 1을 더한 것은 최소값이 나온다.
보통 byte나 short보다 int나 long을 많이 사용한다. 왜냐하면 위에서 살펴봤듯 바이트로 표현 했을 때, 최소값에 -128에 -1을 하면 -129를 예상하지만 127이 되어버리는 등 원하지 않는 계산이 될 수 있기 때문이다. long의 경우에 선언할 때 소문자 L을 붙여주는 것이 좋다.
소수형
소수점 처리.
간단한 계산에는 사용해도 무방하지만, float(32bits)와 double(64bits)가 제공하는 범위를 넘어서면, 값의 정확성을 보장하지 못한다.
돈 계산과 같은 정확한 계산이 요구될 때, 자바에서 java.math.BigDecimal이라는 클래스를 사용한다.
보통 double을 많이 사용.
float: 부호 1자리 + 지수 08자리 + 가수 23자리 = 32비트
double: 부호 1자리 + 지수 11자리 + 가수 52 자리 = 64비트
char, boolean
캐릭터 변수는 유니코드 값을 따른다.
자바의 정수형 중 유일하게 부호가 없는 값이다. 음수 불가능.
* 아스키 코드란와 유니코드란?
영어 알파벳, 숫자, 기호, 각종 여러가지 값을 담을 수 있는 1바이트 단위의 코드표를 만들었다.
이 코드표에는 각 문자마다 고정된 번호가 할당되어 있다.
a라는 문자의 아스키 값은 97이다.
어떤 컴퓨터에서든 어떤 언어를 사용하든 어떤 OS든지 a를 표현할 때 사용하든 번호는 97이라는 약속이다.
자바에서는 유니코드라는 2바이트 단위의 코드표를 사용한다.
따라서 아스키가 할당된 값들이 먼저 나오고, 그 다음에 미리 정해져 있는 유니코드들이 존재한다.
캐릭터 변수를 지정하는 방법은 크게 세가지.
홑 따옴표 안에 문자 하나 넣기
\u 뒤에 16진수 값 넣기
정수 값 넣기
(예시)
char a = 'a';
char c = '가';
char e = '\u1188';
char g = 999;
드디어 마지막인 boolean 값을 알아보자.
불리언형은 true 혹은 false 값만 저장.
참은 1, 거짓은 0이라는 정수로 나타낼 수도 있다.