자바에서 가장 간단한 데이터 타입을 기본 타입이라고 한다.
기본 타임 중 네 가지는 정수 타입이고, 두 가지는 부동소수점 수 타입이며, 문자 타입(char), boolean 타입이다. 총 8가지이다
정수타입
타입 | 저장 공간 |
int | 4 바이트 |
long | 8 바이트 |
short | 2 바이트 |
byte | 1 바이트 |
보통의 경우는 int 로 처리되지만, 지구에 살고 있는 사람의 수를 표현한다면 long 을 사용해야 한다.
byte, short 타입은 로우 수준의 파일 처리나 저장 공간이 귀한 상황에서 주로 사용된다.
(long 타입으로 충분하지 않을 때는, BigInteger 클래스를 사용해야한다)
자바에서 정수 타입은 프로그램을 실행하는 머신과 관계가 없다. 이유는 자바는 write once, run anywhere 에 철학을 두고 만들어진 언어이기 때문이다. 반면에 C, C++ 로 작성한 프로그램에서의 정수 타입은 컴파일러 따라 다르다 (참고라 C에서는 운영체제의 비트수에 따라 인트 형의 저장 공간이 다르다 16-bit라면 2 바이트, 32-bit라면 4 바이트, 64-bit이상부터 4 바이트)
long 타입 리터럴은 'L'을 붙여서 작성한다 e.g ) 1234567890L
2진수 리터럴은 0b 를 붙여 표현한다 e.g) 0b1001 == 9
16진수 리터럴은 '0x' 를 붙여 표현한다 e.g) 0xABCDE
8진수 리터럴은 0을 붙이지만, 표현에 혼란이 있어 지양하는 표현이다
공통적으로 숫자 리터럴에는 '_'을 붙일 수 있다. e.g ) 123_456_789L, 0b1001_1111_0000
*여기서 리터럴 이라고 부르는 부분은, final int a = 10 이라고 선언했으면, 10 을 리터럴(변하지 않는 값) 이라고 부른다.
상수(Constant)와 비슷해 보이지만 상수는 값이 변하지 않는 변수(a)를 상수라고 부른다.(그렇기 때문에 참조형 자료형도 들어갈 수 있음)
부동 소숫점 타입
타입 | 저장 공간 |
float | 4 바이트 |
double | 8 바이트 |
마찬가지로 float 은 'F' 붙여 표현한다 e.g) 3.141592F
Double 은 'D' 를 붙여 표현한다 e.g) 3.141592D
* 부동 소숫점 리터럴을 16진수로도 표현 할 수 있다
e.g ) 0x1.0p-8
보통 부동 소숫점 표현을 할 때 Exponent 의 e 를 많이 사용하지만 16진수에서 e 는 14 를 나타내기 때문에 p 를 사용한다
부동 소숫점을 사용하면서 주의할 점은 반올림에서 오류가 발생할 수 있다.
가령 System.out.println(2.0 - 1.1) 은 0.8999999999999999 로 표현된다.
그 이유는 부동 소숫점이 2진수 체계로 표현되기 때문이다
0.9 를 2진수로 표현하기 위해서는 0.5 + 0.4 로 표현 될 수 있고, 이는 2^-1 + 0.4 로도 표현될 수 있다
2^-1 + 0.4 에서 0.4는 2^-2 + 0.15 로 표현 될 수 있다
2^1 + 2^-2 + 0.15 에서 0.15 는 2^-3 + 0.025 로 표현된다
2^1 + 2^-2 + 2^-3 + 0.025 ... 로 표현하다보면 결국은
11100110011001100110011001100110011001100110011001100... 로 무한히 표현된다
이런 경우는 BigInteger 같은 클래스를 사용하면 정확한 값을 얻을 수 있다
문자열(char) 타입
char 타입은 UTF-16 을 기저로 두고 있다.
특수 케이스로
'\n' - 줄넘김(line feed) '\r' - 커서 위치를 맨 앞으로 옮김, 캐리지 리턴(carriage return)
'\t' - 탭(tab 스페이스 4칸) '\b' - 백스페이스 같은 것들이 있다.
리눅스나 윈도우에서 txt 파일을 읽어올 때 개행 되는 곳에는 항상 라인피드와 캐리지 리턴이 들어있다.
윈도우는 라인피드와 캐리지 리턴 모두가 들어가 있고, 리눅스는 라인 피드만 들어가 있다.
boolean 타입
false , true 거짓 / 참 두개의 값 뿐이며, 0, 1, -1 등의 정수와 아무런 관련이 없다. (C 계열 처럼 사용하면 안됨)
'Kotlin & Java' 카테고리의 다른 글
자주 사용하는 String 클래스 함수 (0) | 2020.02.29 |
---|---|
자바 문자열 고찰 및 생각의 힘 (0) | 2020.02.28 |
간단하게 코루틴 알아보기 (0) | 2020.02.16 |
무공변성 공변성 반공변성 (0) | 2020.01.24 |
[Java ] 두개의 리스트에서 중복되는 객체 비교 (0) | 2018.11.08 |