목차
타입변환이란?
하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환(Type Casting)이라함
자바에서는 boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 수 있다.
타입변환에는 크게 자료형(data type)변환과 객체형(Object Type)변환이 있는데 객체형 변환의 경우 상속관계를 알아야 사용이 가능하다. 지금은 먼저 자료형 타입 변환에 대해 먼저 알아보자.
타입변환의 종류
1) 자동 타입 변환(묵시적 타입 변환)
2) 강제 타입 변환(명시적 타입 변환)
자동 타입 변환
말그대로 자동으로 타입 변환이 일어나는 것을 의미. 자동 타입변환은 값의 허용 범위가 작은 타입이 허용범위가 큰 타입으로 저장될 때 발생
큰 허용 범위 타입 = 작은 허용 범위 타입
작은 허용범위 타입이 큰 허용 범위 타입으로 타입 변환이 일어남
byte<short<int<long<float<double 순으로 허용범위 크기를 정리한다.
※예외]
char타입보다 허용 범위가 작은 byte타입은 char 타입으로 자동 타입 변환 될 수 없다.
왜냐하면 char타입의 허용 범위는 음수를 포함하지 않는데, byte타입은 음수를 포함하기 때문에
강제 타입 변환
큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장하는것을 말함
강제 타입 변환은 캐스팅 연산자 괄호()를 사용하는데, 괄호 안에 들어가는 타입은 나누는 단위다.
작은 허용범위 타입 = (작은 허용범위 타입) 큰 허용 범위 타입
public static void main(String[] args) {
//자동타입변환
char charValue = '가';
int intValue = charValue;
System.out.println("가의 유니코드 : " + intValue);
//강제 타입변환
double doubleValue = 3.14;
intValue = (int)doubleValue;
System.out.println(intValue); //소수점 아래를 버린다.
}
실행결과
가의 유니코드 : 44032
3
정수 연산에서의 자동 타입 변환
정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행함.
byte x = 10;
byte y = 20;
byte result = x+y;
위와 같은 코드는 컴파일 에러(Type mismatch : cannot convert from int to byte)가 발생함
result 변수를 int로 변경해주면 해결 된다.
실수 연산에서의 자동 타입 변환
실수 타입 변수가 산술 연산식에서 피연산자로 사용될 경우 두 피연산자가 동일한 타입이라면 해당 타입으로 연산되지만, 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double타입으로 자동 타입 변환되어 연산을 수행함
꼭 int타입으로 연산해야할 경우 double타입을 int로 강제 변환하고 연산을 수행하면됨
float변수의 경우 실수 리터럴에 f 또는 F가 없으면 double타입으로 해석한다.
float result = 2.3+3.14;
위와 같은 코드는 컴파일 에러가 발생한다.
- + 연산에서의 문자열 자동 타입 변환
숫자+숫자 -> 덧셈 연산 -> 숫자
"문자열" + 숫자 -> "문자열"+"숫자" -> 결합 연산 -> "문자열숫자"
숫자 + "문자열" -> "숫자"+"문자열" -> 결합연산 -> "숫자문자열"
System.out.println();
위 코드와 같은 출력 형식 Form 으로 자주 사용되니 잘 기억해두자
문자열을 기본 타입으로 강제 타입 변환
String -> byte : Byte.parseByte(변수명);
String-> short : Short.parseShort(변수명);
String-> int : Integer.parseInt(변수명);
String -> long : Long.parseLong(변수명);
String -> float : Float.parseFloat(변수명);
String -> double : Double.paseDouble(변수명);
String -> boolean : boolean.paseBoolean(변수명);
문자열이 숫자가 아닌 알파벳이나 특수 문자, 한글 등을 포함하고 있을 경우에 해당 코드를 실행하면 숫자 형식 예외
(NumberFormatException)가 발생합니다.
반대로 기본타입의 값을 문자열로 변경원할시 아래코드 사용
String str = String.valueof(기본타입값);