-
[Java 자바] 2. 변수와 타입 ② 데이터 타입, 타입 변환Programming/Java 2022. 7. 26. 20:39반응형
변수와 타입 이전글: https://erinh.tistory.com/entry/Java-2-변수?category=1028392
2-2. 데이터 타입 (Data Type)
: 모든 변수에는 타입이 있으며, 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라짐
2-2-1. 기본(원시: primitive) 타입
- 데이터 타입은 크게 기본타입과 참조타입으로 구분 (참조타입은 별도 포스팅에서 다룰 예정)
값의 종류 기본 타입 메모리 사용 크기 초기값 저장되는 값 범위 정수 byte 1 byte 8 bit 0 -128 ~ 127 char 2 byte 16 bit \u0000 총 65,536개 문자 표현 가능 short 2 byte 16 bit 0 -32,768 ~ 32,767 int 4 byte 32 bit 0 -2,147,483,648 ~ 2,147,483,647 (약 21억) long 8 byte 64 bit 0 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 실수 float 4 byte 32 bit 0.0 소수 부분 6자리까지 표현 가능 double 8 byte 64 bit 0.0 소수 부분 15자리까지 표현 가능 논리 boolean 1 byte 8 bit false true, false 2-2-2. 정수 타입 (byte, char, short, int, long)
1) byte 타입
[ ❗️Syntax Alert] 실행 중 값의 범위를 초과하면 최소값부터 다시 반복 저장됨
byte var1 = 126; for(int i = 0; i < 5; i++) { // 5번 동안 아래 코드 반복 var1++; // var1 값에 1 더함 System.out.println(var1); // var1 출력 } // 127, -128, -127, -126, -125 출력됨
2) char 타입
- 자바는 모든 문자를 유니코드 타입으로 처리
- char 타입은 하나의 유니코드를 저장하기 위한 데이터 타입 (음수가 없음)char c1 = 'A'; // char 타입은 (' ')를 사용하여 초기화 가능 char c2 = 65; // 10진수로 저장 char c3 = '\u0041' // 16진수로 저장 int uniCode = c1; // int 값에 char 저장해보기 System.out.println(c1); // A System.out.println(c2); // A System.out.println(c3); // A System.out.println(uniCode); // 65(10진수 값으로 저장)
[ ❗️Syntax Alert] char타입 변수에 ('')로 초기화를 할 경우, 컴파일 에러 발생
char c = ''; // 컴파일 에러 char c = ' '; // 에러 없음 // 참고) String 타입은 빈 문자 대입 가능 String str = "";
3) short 타입
- C언어와의 호환을 위해 사용 (비교적 자바에서는 사용 하지 않음)
4) int 타입
- 약 21억까지의 정수 표현이 가능하며, 이 범위를 초과할 것으로 예상될 경우 long 타입 사용 필요
5) long 타입
- 수치가 큰 데이터를 다루는 프로그램에서 필수 사용(은행권, 우주 관련 프로그램)
[ ❗️Syntax Alert] int 값을 초과하는 값 범위에는 숫자 뒤에 L을 반드시 붙여줘야 한다.
long var1 = 10; long var2 = 20L; long var3 = 100000000000000; // 컴파일 에러 long var4 = 100000000000000L;
2-2-3. 실수 타입 (float, double)
- float와 double의 메모리 사용 크기는 각각 int, long과 같지만 저장 방식이 달라 훨씬 더 큰 범위의 값 저장 가능
// 저장 가능한 범위의 값 비교 byte < short < int < long < float < double
- 실수 타입으로 저장되는 가수는 이진수로 나타낼 수 있는 가장 가까운 수여서 실제 정수값과 오차가 존재
2-2-4. 논리 타입 (boolean)
- 논리값(true/false)을 저장할 수 있는 데이터 타입
- 주로 조건문과 제어문의 실행 흐름을 변경하는데 사용2-3. 타입 변환 (Type Conversion)
: 특정 데이터 타입을 다른 데이터 타입으로 변환하는 것
2-3-1. 자동 타입 변환 (묵시적 형변환, Implicit Conversion)
- 연산에서 컴파일러가 자동으로 수행해주는 타입 변환 (데이터 손실이 최소화되는 방향)
- 타입의 표현 범위에 따라 다음과 같은 방향으로 자동 타입 변환이 이루어짐byte → short → int → long → float → double
char↗int var1 = 10; double var2 = var1; System.out.println(var1); // 10 System.out.println(var2); // 10.0 (int 변수 var1을 자동 형변환하여 저장) // 단, 음수값을 표현하지 못하는 char의 경우, byte -> char로 갈 때 자동형변환이 일어나지 않음 byte var3 = 65; char var4 = var3; // 컴파일 에러
2-3-2. 강제 타입 변환 (명시적 형변환, Explicit Conversion)
- 큰 크기 타입을 작은 타입으로 변환할 때 타입 캐스트 연산자 () 를 사용하여 강제 수행
double var1 = 3.14 int var2 = (int) var1; System.out.println(var1); // 3.14 System.out.println(var2); // 3 (자동으로 형변환)
- 하지만, 강제 변환시 데이터 손실이 발생할 수 있음
long var1 = 2_400_000_000L; int var2 = (int) var1; System.out.println(var1); // 2400000000 System.out.println(var2); // -1894967296, 값 손실 발생
- 타입 변환시, 변환될 타입의 최소값 최대값을 벗어나는지 반드시 검사하고 변환해야 함
- 자바에서 제공되는 최대값, 최소값 상수를 통해 검증 가능기본 타입 최대값 상수 최소값 상수 byte Byte.MAX_VALUE Byte.MIN_VALUE short Short.MAX_VALUE Short.MIN_VALUE int Integer.MAX_VALUE Integer.MIN_VALUE long Long.MAX_VALUE Long.MIN_VALUE float Float.MAX_VALUE Float.MIN_VALUE double Double.MAX_VALUE Double.MIN_VALUE 반응형'Programming > Java' 카테고리의 다른 글
[Java 자바] 4. 조건문과 반복문 ① 조건문, if, if-else, else if, switch (0) 2022.07.30 [Java 자바] 3. 연산자 ② 이항 연산자, 삼항 연산자 (0) 2022.07.27 [Java 자바] 3. 연산자 ① 연산자 우선순위, 단항 연산자 (0) 2022.07.26 [Java 자바] 2. 변수와 타입 ① 변수의 선언, 사용, 읽기 (0) 2022.07.26 [Java 자바] 1. 자바의 기본 개념 (Java SE, JDK, JRE, JVM) (0) 2022.07.26