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 |
댓글