Java Category/Java

[JAVA] 기본 타입

ReBugs 2022. 12. 22.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


변수를 선언할 때 주어지는 타입에 따라 변수에 저장할 수 있는 값의 종류와 허용 범위가 달라진다

자바에서 타입에는 기본 타입과 참조 타입 두 개로 나눠지며, 오늘 다룰 내용은 기본 타입이다.

 

자바는 정수, 실수, 논리값을 저장할 수 있는 기본(primitive) 타입을 제공한다. 자바가 제공하는 기본 타입은 8개이다. 

기본 타입은 4개(정수, 실수, 논리)로 나뉘어지며 각각 5개, 2개, 1개이다

  • 정수형(byte, char, short, int, long)(5개)
  • 실수형(float, double)(2개)
  • 논리형(boolean)(1개)
타입 메모리 사용 크기 저장되는 값의 허용 범위
byte 1byte 8bit -2^7 ~ 2^7-1 -128 ~ 127
short 2byte 16bit -2^15 ~ 2^15-1 -32,768 ~ 32,767
char 2byte 16bit 0 ~ 2^16-1 0 ~ 65,535(유니코드)
int 4byte 32bit -2^31 ~ 2^31-1 약 -21억 ~ 약 +21억
long 8byte 64bit -2^63 ~ 2^63-1 약 -900경 ~ 약 +900경
boolean 1byte 8bit true 또는 false
float 4byte 32bit (+/-)1.4X10^-45 ~ (+/-)3.4X10^38
double 8byte 32bit (+/-)4.9X10^-324 ~ (+/-)1.8X10^308

 

정수 리터럴
프로그래머에 의해 직접 입력된 값을 리터럴이라고 함, 입력된 리터럴 중에서 자바가 정수로 인식하는 경우는 우리가 흔히 사용하는 10진수와 2진수, 8진수 16진수가 있다.
2진수 : 0b 또는 0B로 시작하고 0과 1로 구성됨
0b1011 -> 11
0b10100 -> 20
8진수 : 0으로 시작하고 0~7 숫자로 구성됨
013 -> 11
0206 -> 134
16진수 : 0x 또는 0X로 시작하고 0~9 숫자와 A, B, C, D, E 또는 a, b, c, d, e로 구성됨
0xB3 -> 179
0x2A0F -> 10767

 

특이한 점은 기본적으로 컴파일러는 정수 리터럴을 int타입으로 간주한다는 점이다.

따라서 int타입의 허용범위를 초과할 경우 long 타입임을 컴파일러에게 알려줘야 한다.

컴파일러에게 long타입임을 알려주는 방법은 정수 리터럴 뒤에 소문자 l이나 대문자 L을 붙이면 된다.

long a = 10000000000; //컴파일 에러
long b = 10000000000L; //정상

 

또한 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에, 실수 리터럴을 float타입으로 저장하고 싶다면 리터럴 뒤에 소문자 f나 대문자 F를 붙여 컴파일러가 float 타입임을 알 수 있도록 해야 함

float a = 3.14; //컴파일 에러
float b = 3.14F; // 정상

 

 알파벳 소문자 e 또는 대문자 E가 포함되어 있는 숫자 리터럴은 지수와 가수로 표현된 소수점이 있는 10진수 실수로 인식함
5e2 = 5.0 X 10^2 = 500.0
0.1e3 = 0.1 X 10^3 = 100.0
500e-2 = 500 X 10^-2 = 5.0
public static void main(String[] args) {
		float a = 5e2F;
		float b = 500e-2F;
		System.out.println(a);
		System.out.println(b);
	}​

 

위 코드의 실행결과는
500.0
5.0

 

문자 타입
char 타입은 문자 타입이라고도 한다.
하나의 문자를 작은따옴표(')로 감싼 것을 문자 리털이라고 한다.
문자 리터럴은 유니 코드로 변환되어 저장되는데, 유니코드는 세계 각국의 문자를 0~65535 숫자로 매핑한 국제 표준 규약이다.
자바는 이러한 유니코드를 저장할 수 있도록 char 타입을 제공한다.
public class Main{
    public static void main(String[] args) {
        char c1 = 'A';
        char c2 = 65;

        char c3 = '가';
        char c4 = 44032;

        System.out.println("c1 : " + c1);
        System.out.println("c2 : " + c2);
        System.out.println("c3 : " + c3);
        System.out.println("c4 : " + c4);
    }
}
/*
c1 : A
c2 : A
c3 : 가
c4 : 가
*/​


참고로 char 타입의 변수에 어떤 문자도 대입하지 않고 단순히 초기화를 할 목적으로 공백이 아닌 빈 문자를 대입하면 컴파일 에러가 발생한다.

char c = ''; // 컴파일 에러

댓글