[Java] 자료형(묵시적 형변환, 명시적 형변환)
by 무작정 개발이번에는 Java의 변수 및 자료형, 그리고 묵시적 형 변환, 명시적 형 변환에 대해 정리할 것이다.
Java를 보다 깊게 이해하기 위해 다시 한번 복습하면서 글을 작성 중입니다.
기초적인 내용은 다루지 않을 예정입니다.
자료형(Data Type) 이란?
시작하기 앞서 자료형은 크게 '기본형'과 '참조형' 2가지로 나눌 수 있습니다.
기본형 변수는 실제 값(data)을 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 갖습니다.
Java에서는 C언어와 달리 참조형 변수 간의 연산을 할 수 없어서 실제 연산에서는 기본형 변수만 사용합니다.
자료형이란 변수에 저장되는 자료의 타입을 의미합니다. 변수를 그릇이라고 비유하자면 자료형은 그릇의 종류를 나타냅니다.
Java 기본 자료형 종류에는 크게 논리, 문자, 정수, 실수형으로 구분하고 모두 8개의 타입(자료형)이 있습니다.
< 가장 많이 쓰이는 5개의 자료형 >
- int 형 : 크기는 32비트(4바이트)로 약 -21억 ~ 21까지 총 42억 9천 개 정도까지 나타낼 수 있습니다.
- long 형 : 크기는 64비트(8바이트)로 int 형 보다 더 많은 숫자를 포함하고, 보통 int에서 포함하지 못할 때 사용합니다.
- double 형 : 64비트(8바이트)로 소수점까지 포함시켜주고, float 보다 더 많은 소수점을 표현할 수 있습니다.
- boolean 형 : True(참), False(거짓)을 나타낼 때 사용하고, 1 bit(비트) 이기에 0, 1로만 나타냅니다.
- char 형 : 16비트(2바이트)로 문자형인데 영어를 나타낼 때는 8비트 표현이 가능합니다. 하지만 다른 언어(한국어) 표현을 위해 2바이트가 필요합니다.
예를 들어 하단의 소스로 정리하자면
public class Java {
public static void main(String[] args) {
int n1 = 10; // int 형 변수 n1에 10을 넣음
}
}
Java라는 이름을 가진 클래스에 있는 main 함수 안에 n1이라는 이름을 가진 int 형 변수를 선언하고, 10이라는 값을 넣었습니다.
위의 그림을 보면 Java에서 변수를 선언하고, 어떻게 값이 저장되는지의 그림입니다.
묵시적 형 변환 & 명시적 형 변환
public class Java {
public static void main(String[] args) {
int n1 = 10; // int 형 변수 n1에 10을 넣음
double n3 = 30.1;
double t1 = n1; // 묵시적 형변환
int t2 = (int)n3; // 명시적 형변환
}
}
묵시적 형 변환, 명시적 형 변환을 위의 코드를 중심으로 정리할 것입니다.
묵시적 형 변환
묵시적 타입 변환은 대입 연산 혹은 산술 연산에서 c 컴파일러가 자동으로 실행해 주는 타입 변환을 가리킵니다.
데이터의 손실이 최소화되는 방향으로 변환이 진행되고, 상단의 소스 코드를 참고하여 정리하자면 변수 n1은 int 형으로 32비트입니다. double 형은 64비트로 int 형 보다 2배 큰 메모리 공간을 확보하고 있어서 int형 자료형인 n1 변수가 double형 변수 t1에 들어오는 건 문제가 없습니다.
명시적 형 변환
명시적 형 변환은 어떤 자료형으로 선언된 변수를 다른 자료형으로 변환(형 변환)해줍니다.
묵시적 형 변환과 비슷하지만 큰 데이터에서 작은 데이터로 변환될 때 일부를 잘라서 작은 데이터 크기로 맞춰주는 것을 명시적 형 변환이라고 합니다.
// 변수 t2는 int형, 변수 n3는 double 형이다.
int t2 = n3 // Type Error 발생
int t2 = (int)n3; // 명시적 형변환
위의 2번 줄처럼 작성하면 Type Error이 발생합니다.
변수 n3는 double형이고, 변수 t2는 int형 이기 때문이기에 double형 데이터를 (바꾸고 싶은 자료형)으로 바꿔주고 전환을 하면 명시적 형 변환이 일어납니다.
Reference
'Language > Java' 카테고리의 다른 글
[Java8] 함수형 인터페이스, 람다 표현식 (1) | 2022.11.08 |
---|---|
[Java] if-else문 보다 switch문이 더 효율적인 이유 (2) | 2022.10.30 |
[Java] main 함수 (1) | 2022.10.24 |
[Java] Call by Value, Call by Reference (1) | 2022.10.11 |
[Java] Stack, Heap (2) | 2022.10.11 |
블로그의 정보
무작정 개발
무작정 개발