형변환(Type Casting)

신광진·2021년 3월 18일
0

Java

목록 보기
7/19
post-thumbnail

1. 형변환이란?


모든 변수와 리터럴에는 타입이 있다.
프로그램을 작성하다 보면 같은 타입뿐만 아니라 서로 다른 타입간의 연산을 수행해야 하는
경우도 있다.
이럴 때는 연산을 수행하기 전에 타입을 일치시켜야 하는데,
변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 '형변환(Casting)' 이라고 한다.

2. 기본형 표현범위 포함 관계

byte(1byte) -> short(2byte) -> int(4byte) -> long(8byte) -> float(4byte) -> double(8)byte
            -> char(2byte)

3. 형변환 종류


  • 자동 형변환
    - 형변환을 하는 이유는 주로 서로 다른 두 타입을 일치시키기 위해서이다.
    형변환을 생략하면 컴파일러가 알아서 자동적으로 형 변환을 진행하는 경우가 있다.
    - 기본형 포함범위 포함 관계에서 왼쪽에서 오른쪽으로 이동하는 것은 자동 형변환이 된다.

  • 강제 형변환
    • 강제 형변환은 사용자가 강제로 변수의 자료형을 바꿔주는 것을 말한다.
      강제 형변환의 경우는 사용자가 바꿀 자료형을 명시적으로 적지않으면 오류가 발생한다.
    • 강제 형변환은 기본형 표현범위 포함 관계에서 큰 자료형에서 작은 자료형으로(오른쪽에서 왼쪽으로)
      바꿀때 사용한다.
    • 강제 형변환을 한다는 것은 Overflow가 발생할 수 있다는 위험을 감수하겠다는 의미이다.

강제 형변환 예시

char c = 'A';
int a = 10;

char c = (char)a;
// int는 char보다 값의 포함범위가 크기때문에 int형 변수값을 char변수에 담기위해서는 강제 형변환을 해야한다.

4. 유의사항


기본형 표현범위 포함 관계 표를보고 생각해볼 부분이 있다.
작은자료형에서 큰 자료형으로 넘어가는것은 형변환이 자동으로 이루어진다고 했다.
그렇다면 같은 2byte의 크기를 가지는 short와 char는 형변환을 생략해도 될까?

  • short와 char

    • short와 char는 같은 2byte크기를 가진다.
      그렇다면 형변환이 생략될까?
      결론부터 말하면 형변환을 해야한다.

  • short, char, byte

    • short, char, byte는 연산시 int로 자동 형변환된다.
      자바에서는 4byte보다 작은 크기의 자료형을 연산시 int로 자동 형변환 시키기 때문이다.

유의사항 예시

short s = 123;
char c = 'A';

s = c;
//두 자료형의 크기는 같지만 대입연산을 하기 때문에 우항(char)가 int로 자동형변환된다.
//따라서 short형 변수에 int값을 넣는것이기 때문에 s= (short)c;로 형변환 해야한다.

5. 연습문제


Q. 다음 중 형변환 생략이 가능한 것은?

byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;
//long과 float은 명시적으로 'L'과 'f'를 변수값 뒤에 써야합니다.

1. b = (byte)i;
2. ch = (char)b;
3. short s = (short)ch;
4. float f = (float)l;
5. i = (int)ch;
profile
이거 왜안되냐

0개의 댓글