본문 바로가기
Back-end/Java 개념

Java의 기본 자료형(Primitive)

by devraphy 2022. 1. 28.

1. 정수형(short, int, long)

a) Java가 숫자 계산을 하는 방법

- Java는 숫자 연산을 int형으로 변환하여 계산한다. 즉, int형 연산을 기본으로 한다. 

- short 자료형의 변수 2개를 더한다고 하더라도 연산 시 int로 변환하여 계산하고, int형으로 결과를 반환한다.

public class MyClass {
    public static void main(String args[]) {
        short num1 = 10;
        short num2 = 10;
        short num3 = num1 + num2;
        System.out.print(num3);
        
    }
}

 

- 이처럼 short 자료형이지만, Java가 연산을 할 때에는 int로 계산이 되기 때문에 위와 같은 에러가 발생한다.

- 즉, 작은 자료형이 한번 큰 자료형으로 변환되면 다시 작은 자료형으로 돌아올 수 없다.

- 그 이유는 자료형 메모리 크기의 차이만큼 데이터 손실이 발생하기 때문이다.

 

- short를 쓴다고 드라마틱하게 메모리가 절약되는 것도 아니며, 계산이 더욱 빠른 것도 아니다.

- 정말 필요한 경우가 아니라면 int 자료형으로 사용하자. 

 

 

b) long 자료형에 L을 붙이는 이유 

public class MyClass {
    public static void main(String args[]) {
        long num1 = 12345678910;
        System.out.print(num1);
    }
}

 

- long 자료형으로 변수를 선언할 때에는 리터럴이 되는 숫자에 반드시 L을 붙여야 한다.

- 그 이유는 위에서 설명한 것과 동일한데, Java는 기본적으로 숫자 연산을 int로 인식하기 때문이다.

- 위의 예시에서 사용된 12345678910이라는 숫자는 int 자료형의 범주를 벗어난 것으로 판단하여 오류가 발생한다.

- 그러므로 반드시 리터럴에 L을 붙여야 Java가 이를 long 자료형의 숫자라는 것을 인식한다. 

 

 

2. 실수형(float, double)

- float과 double은 실수를 표현하기 위해 사용되는 자료형이다.

 

a) 실수의 개념 정의

- 실수는 두 수 사이에 존재하는 무한개의 수를 가리킨다. 예를 들어, 1과 2 사이에 존재하는 모든 수를 실수라고 할 수 있다.

- 두 수 사이의 실수는 무한개가 존재하므로, 정수처럼 딱 정확하게 표현할 수 없다. 

- 즉, 근사치로만 표현할 수 있다. 

 

 

b) 근사치로 표현되는 이유 

- 예를 들어, 1이라는 숫자를 정수가 아니라 실수로 표현한다고 해보자. 

- 0.999999999999999는 1인가? 아니면 1.000000000000000001은 1인가? 

- 이처럼, 실수는 근사치로만 표현할 수밖에 없다. 두 수의 사이에 무한하기 때문이다.

 

 

c) float과 double의 차이점 

- float은 소수점 이하 6자리까지 정밀하다.

- double은 소수점 이하 15자리 까지 정밀하다.

- 여기서 정밀하다는 표현은 연산에서 오차가 발생하지 않는다는 것이다. 

- 이는 연산의 결과가 소수점 6자리 또는 15자리 이하일 때를 얘기하는 것이므로 헷갈리지 말자. 

 

 

3. 문자형(String, char)

a) 유니코드(Unicode)

- Java는 유니코드를 기반으로 한다. 

    * 유니코드란, 전 세계의 언어를 표현할 수 있는 컴퓨터 문자 체계

- 그러므로 변수에 문자를 저장해도 실제로 메모리에 저장되는 값은 유니코드 값이다. 

- 아래 예시를 보자. 

public class MyClass {
    public static void main(String args[]) {
        char char1 = 54736; // 유니코드 
        char char2 = 0xD5D0; // 유니코드 16진수 
        char char3 = 'h';
        System.out.println(char1);
        System.out.println(char2);
        System.out.println(char3);
    }
}

 

- 예시처럼, 문자형 변수에 유니코드(숫자) 값을 입력해도 동일한 결과를 얻을 수 있다. 

- 이처럼, 어떤 외국어를 직접 타이핑할 수 없는 환경이라도 유니코드만 알고 있다면 외국어를 사용할 수 있다. 

 

'Back-end > Java 개념' 카테고리의 다른 글

자바에서 람다를 사용하는 방법  (0) 2023.06.26
Optional이 뭔데? 왜 쓰는데?  (0) 2023.06.23
Unreachable Statement 오류  (0) 2022.05.10
Collections와 Collection에 대하여  (0) 2022.05.09
변수와 리터럴에 대하여  (0) 2022.01.27

댓글