티스토리 뷰
이번 포스팅에서 알아볼 것은 Java에서의 형 변환이다. 숫자의 Data Type에는 정수와 실수 두 가지가 존재하는
것은 누구나 아는 사실이다. 그러나 여기서 중요한 점은 사람이 정수와 실수를 더하는 것과 컴퓨터가 더하는 것에는
큰 차이가 있다는 점이다.
// 정수 200의 bit 값
00000000 00000000 00000000 11001000
// 실수 200.0의 bit 값
01000011 01001000 00000000 00000000
사람에게는 같은 숫자인 200과 200.0을 컴퓨터는 위처럼 전혀 다른 형태로 저장한다. 따라서 컴퓨터가 정수와 실수를
연산할 때는 한 쪽으로의 형 변환이 이루어져야 한다는 것이다. Java는 이러한 형 변환을 자동으로 처리해주는데
이것을 implicit Conversion이라고 한다. (암시적 형 변환)
Implicit Conversion
아래의 예제를 살펴보자.
// Case 1 : No Problem
double a = 3.0F
// Case 2 : Error
float a = 3.0
상수에서도 실수의 기본형은 double이라고 지난 포스팅에서 언급했었다. 그러나 위 예제에서 Case 1이 아무 문제없이
컴파일된 이유는 Java에서 자동으로 float을 double형으로 형 변환시켜주었기 때문이다. 여기서 중요한 점은 바로 모든
경우에 대해서 implicit Conversion이 일어나지 않는다는 것이다.
즉, 데이터의 손실이 일어나지 않는, 더 많은 데이터를 수용할 수 있는 방향으로의 Conversion만 일어난다.
반대의 경우인 Case 2가 그 대표적인 예이다. 상수인 3.0은 double이고 변수는 float형이기 때문에 data의 손실이 일어날
가능성이 있다고 판단하여 Error가 발생한다.
가령, float형이 1부터 10까지의 숫자를 담을 수 있고, double형이 1부터 100까지의 숫자를 담을 수 있다고 해보자.
그렇다면 100이라는 숫자를 담고있는 어떤 변수를 float형으로 강제로 변환해버린다면 100에서 10으로의 90만큼의 데이터 손실이 일어나는 것으로 이것은 절대 용인할 수 없다.
따라서 Java에서는 아래와 같은 규칙을 따라서 표현 범위가 좁은 데이터 타입에서 넓은 데이터 타입으로의 변환만 허용
된다.
한가지, 여기서 character형이 int로 Conversion 되는 것은 해당 문자의 유니코드 값으로 변환되는 것을 뜻한다.
Explicit Conversion
때에 따라서는 사용자가 명시적으로 특정 변수에는 특정 Data type만을 강제해야 할 경우가 있을 때도 있고, 또는
implicit Conversion이 적용되지 않는 경우에는 사용자가 직접 명시적으로 형 변환을 시켜주어야 한다.
이 때는 아래와 같이 입력 값 앞에 (Data Type) 을 입력해주어 특정 Data type을 명시적으로 강제할 수 있다.
// Case 1 : float
float a = (float)100.0;
// Case 2 : int
int b = (int)100.0F;
비록 할당하고자 하는 입력 값들이 변수의 type과 일치하지 않을뿐더러 Implicit Conversion의 규칙에도 맞지 않지만
위와 같이 괄호 안에 Data type을 지정해서 형 변환을 하는 것이 바로 Explicit Conversion이다.
그러나 데이터의 손실이 일어날 수 있다는 것을 항상 생각해야한다.
포스팅의 모든 학습 내용은 생활코딩의 Java 입문 수업의 출처임을 밝힙니다.
'프로그래밍 > Java 기초' 카테고리의 다른 글
Java(8), 조건문 (0) | 2020.04.03 |
---|---|
Java (7), 연산자 (0) | 2020.03.31 |
Java (5), Data Type (0) | 2020.02.12 |
Java (4), 변수 (0) | 2020.02.12 |
Java (3), 숫자와 문자열 (0) | 2020.01.31 |