JAVA::자바에서 형변환(Casting)하기
공부방/JAVA

JAVA::자바에서 형변환(Casting)하기

형변환(Casting)

알고리즘 문제를 해결하다 보면 종종 숫자를 string으로 변환해서 문제를 해결하거나 char형으로 변경해서 문제를 해결하는것이 더 유리한 경우도 있습니다.

 

그리고, 그 외에도 작업을 하다보면 여러 타입간의 연산을 수행하거나 특정 형식을 맞추기위해 형을 바꿔야하는 경우가 있습니다.

 

이러한 경우에 변수나 리터럴 타입들을 다을 타입으로 변환해주느데 이것을 형변환이라고 합니다.

정의(Definition)

변수나 리터럴 타입을 다른 타입으로 변환하는 것

형변환 종류(자동 vs 강제)??

그렇다면 현변환은 어떻게 해야할까?

일반적으로 컴파일러에 따라 형변환을 생략하더라도 알아서 자동적으로 추가해서 형변환시켜주는데 이를 자동형변환(묵시적 형변환)이라고 한다.

 

그리고 그렇지 않은 경우 바꿀 타입을 정해주어 형변환 시키는 것을 강제형변환(명시적 형변환)이라고 한다.

그럼 이 자동형변환, 강제형변환에 대하여 알아보겠다.

자동형변환(묵시적형변환)

형변환을 생략하더라도 컴파일러가 알아서 해당 타입을 변환해주는 것

그렇다면 왜? 위에서 보는 것과 같은 경우에는 자동으로 형변환을 해주는 것일까?

 

자동형변환의 경우를 보면 작은 타입을 큰타입으로 변환할때 자동으로 형변환을 해주게 된다(Up-Casing). 즉 값의 손실이 없기 때문에 컴파일러에서 처리하는 기준에 맞추어 자동으로 형변환 해주는 것으로 보면 된다.

 

그리고 추가로 boolean의 경우에도 타입 크기가 더 작더라도 컴파일러에서 따로 관리해서 변환해 주지 않기때문에 명시적으로 변환해주어야한다.

강제형변환(명시적형변환)

강제형변환은 한마디로 변환할 타입을 명시해주는 방법이다

개인적으로 명시적형변환으로 칭하는게 좀더 올바른거 같다. 그리고 기본적으로는 자동형변환이 되더라도 명시적 형변환을 해주는 것이 올바른(?) 것 같다.

 

일반적으로 큰 타입은 더 작은 타입으로 형변환이 되지 않는다. 그렇기 때문에 명시를 해줌으로써 형변환을 해주게 되는데 여경우 바꾸게 될 타입을 앞에 적어주게 된다(Down-Casing)

 

다만 이렇게 작은 타입으로 변환되기 때문에 값의 손실이 발생하게 된다. 예를들어 int(4byte)를 byte(1byte)로 형변환을 하게 될 경우 3바이트에 포함되는 값이 버려지게 된다.

형변환은 어떻게 하는가?

그렇다면 형변환은 어떻게 하면 되는가?

현재 다루고 있는 기본형의 경우 그냥 바꾸고자하는 타입을 명시해주면된다.

다만, 어느정도 값의 오차가 발생할 수 있는지를 그리고 어떻게 값이 변환 될 지를 예상(예측)하는게 더 중요하다고 생각한다.

 

그리고 아래에서 다루는 내용들도 Down-Casting 기준으로 정리하도록 하겠다.

이유는 Up-Casting의 경우 타입의 크기가 더 크끼 때문에 값의 손실이 발생하지 않기 때문이다.

정수형 간의 형변환

int형을 short형, byte형으로 바꿀 경우 값이 어떻게 저장되는지 보면 다음과 같다.

예를들어 int형의 범위는 –2,147,483,648 ~ 2,147,483,647 표현이 가능하다. 다만 short의 경우 값의 범위가 -32,768 ~ 32,767 까지 표현가능하기 때문에 32767보다 큰 값을 short형으로 변환시 32767로 값이 저장된다.

 

즉 표현하고 남은 값은 전부 버려지게 된다.(값의 손실 발생)

더 큰 타입으로 변환을 잠시 언급하자면 남은 영역은 0으로 채워진다(다만 변환 값이 음수의 경우 빈공간을 1로 채우게 된다.)

실수형 간의 형변환

실수의 경우에도 정수형과 같게 변환된다. 일단 큰타입으로의 변환은 남은 영역은 0으로 채워진다.

그리고 작은 타입으로의 변환 또한 bit로 영역을 표현후 남은 부분을 전부 버리게 된다.(값의 손실 발생)

주의할 점...

기본형과 참조형은 서로 형변환 할 수 없다는 점이다.

이유는 기본형과 참조형의 차이겠다. 기본형은 해당영역에 값을 그대로 할당하지만 참조형은 그곳에 데이터의 주소값을 저장하기 때문이다.

 

그리고 char형과 short는 두 크기가 같음에도 형변환되지 않는데 이유는 short의 경우 음수의 범위도 표현하기 때문에 그 표현 범위가 다르기 때문이라고 한다.

 

다만 개인적으로 큰타입으로의 변환의 경우에도 자동형변환을 믿고 맡기기 보다는 명시를 해주는 것을 선호한다.


 

3. Java 자바 - 자동 타입 변환, 강제 타입 변환

타입 변환 자바에는 두 종류의 타입 변환이 있다. - 자동 타입 변환 (묵시적) - 강제 타입 변환 (명시적) 1. 자동 타입 변환 프로그램 실행 도중에 자동으로 타입 변환이 일어난다. 작은 크기 가지

kephilab.tistory.com

 

[Java] 묵시적. 명시적 형 변환

▶ 묵시적 형 변환 (Implicit Type Conversion) 자바에서 묵시적 형 변환이란 자동으로 형 변환 해주는 경우를 의미한다. ▶ 명시적 형 변환 (Explicit Type Conversion) 데이터 앞에 변환할 타입으로 명시해주

to-paz.tistory.com

 

Java 형변환(Casting)이란

<!doctype html> Java 형변환(Casting)이란 형변환(Casting)이란? 변수나 리터럴 타입을 다른 타입으로 변환하는 것을 '형변환(Casting)'이라 한다. 주로 타입이 다른 값들을 계산하는 경우 사용된다. 타입이

sambalim.tistory.com

 

형변환(Casting)

1. 형변환이란? 프로그램을 작성하다 보면 타입 간의 연산뿐만 아니라 다른 타입과의 연산을 해야 할 때가 있는데, 연산을 하기 위해서는 서로 간의 타입을 일치시켜야 하므로 반드시 '형변환'을

devroy.tistory.com