Categories: Java 언어Korean

Java 총 정리[3. 형변환]

형 변환

Java로 프로그램을 만들다 보면 기존의 정의를 했던 자료형을 다른 자료형으로 변경을 해야 하는 경우가 있고 이것을 모르거나 익숙하지 못해서 문제를 발생 시키는 경우가 있는데 도대체 어떻게 해야지 기존 자료형에서 다른 자료형으로 변경이 가능한지 궁금하죠? 저도 알고는 있었지만 실제 프로그램을 구현을 할 때 다른 자료형으로 바꿔야 하는 것을 까먹고 적용을 하지 않아서 엄청 고생한 기억이 납니다. 

기존 자료형에서 다른 자료형으로 바꾸는 방법은 무엇일까요? 이것은 많이 사용을 하면 좋지는 않지만 필요할 때 적재적소에 적용을 하면 프로그램을 만드는데 상당한 도움이 될 수 있습니다. 이 글을 끝까지 읽는다면 기존 자료형에서 다른 자료형으로 변경을 할 수 있습니다.

기존 자료형에서 다른 자료형으로 바꾸는 것을 형 변환이라고 합니다. 형이 변환이 된다는 뜻으로 추론을 해볼 수 있었습니다. 이 형 변환을 하는 방법이 2가지가 있습니다. 바로 자동 형 변환과 강제 형 변환이 있습니다. 이 글을 읽고 공부하신다면 형 변환을 적재적소에 적용을 하면 간단하게 프로그래밍을 할 수가 있을 것입니다.

형 변환이란?

형 변환이란 말 그대로 형을 바꾸는 것을 말합니다. Java 첫 걸음에서 배운 변수와 자료형에서 여러 자료형이 있는데 처음에 지정한 자료형에서 다른 자료형으로 바꾸는 것을 말합니다.

<알아야 할 형 변환 내용>

  1. 기본 자료형과 참조 자료형이 있는데 기본 자료형은 어떤 기본 자료형과도 형 변환이 가능합니다. 하지만 기본 자료형과 참조 자료형은 형 변환을 할 수 없습니다.
  2. 잘못된 형 변환은 자료 손실이 일어 날 수 있습니다.
  3. 자동 형 변환과 강제 형 변환 중에 강제 형 변환을 사용을 하는 것이 좋습니다.
  4. 참조 자료형과 기본 자료형을 더하기 연산으로 더하면 형 변환에 우선 순위가 존재 하는데 참조 자료형과 기본 자료형 중 참조 자료형 우선 순위가 높아서 기본 자료형이 참조 자료형으로 변경됩니다.

※ 아무런 동작 없이 기본 자료형이 참조 자료형으로 참조 자료형이 기본 자료형으로 바뀌지는 않습니다. 같은 자료형 타입만 바로 형 변환을 할 수 있습니다.

1. 자동 형 변환

자동 형 변환은  컴퓨터가 알아서 자료형을 바꿔주는 것을 말합니다. 

참고 해야 할 사항은 기본 자료형에만 해당되는 형 변환 방식입니다. 

여기서 기본 자료형은 byte, short, char, int, long, float, double, boolean이 있습니다.

 boolean은 논리형이라 참과 거짓이라는 값만 가지므로 제외하고 진행을 하겠습니다. 

<자동 형 변환 규칙>

메커니즘 상 상위에 있는 것으로 자동으로 형 변환이 진행이 됩니다.

예를 들어 정수와 실수가 있으면 메커니즘으로 보면 실수는 소수점 값을 가지고 있기 때문에 정수보다 메커니즘으로 상위에 있다고 볼 수 있습니다.

메커니즘이 같다면 자료형의 크기를 기준으로 자동 형 변환을 하게 됩니다.

그 이유는 작은 크기의 자료형으로 바뀌면 데이터 손실이 발생 할 수 있기 때문입니다.

※정리 하면 byte -> short/char -> int -> long -> float -> double로 자동 형 변환이 진행이 된다고 생각 하시면 됩니다.

int a = 7/2; // int로 값을 저장하기 때문에 3.5가 아니라 3으로 a에 저장된다.
double avg 9/2.0; 
// int형과 double로 나누면 int형이 자동으로 double로 형이 변환되어 9.0/2.0이 되어 avg에 4.5가 저장된다.

2. 강제 형 변환

강제 형 변환은 직접 형 변환을 지정을 해주는 것입니다. 이 경우 확대 형 변환과 축소 형 변환이 있습니다.

확대와 축소는 자료형의 크기로 말하는데 확대는 기존에 정의한 자료형 보다 더 큰 크기에 자료형으로 바꾸는 것 입니다.

축소는 기존에 정의한 자료형 보다 더 작은 크기에 자료형으로 바꾸는 것을 말합니다.

여기서 중요한 부분은 확대 형 변환은 값이 커져서 데이터 손실이 발생을 하지 않지만 축소 형 변환은 데이터 손실이 발생 할 수도 있습니다.

byte b = 120;
int i = 0;
b = (byte)259; 
// byte 범위를 넘는 값을 byte 변수에 대입을 하면 값 손실이 발생 하여 b에는 3이 저장된다.
i = (int) 259.428;
// 실수인 259.428을 정수인 int에 대입을 하면 소숫점에 손실이 발생하여 i에는 259가 저장된다.
Dolphin

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

4개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

5개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

5개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

6개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

6개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

6개월 ago

This website uses cookies.