JAVA

형변환(casting) (자동 형변환, 강제 형변환)

서윤-정 2023. 8. 15. 15:01

 

 

✔️ 형변환이란?

변수나 값의 타입을 다른 타입으로 변환하는 것을 말한다.

자바에서는 기본 데이터 타입과 객체 타입 간의 형변환을 다룰 수 있다.

두가지 형변환 유형이 있다.

 

 

 

 

✔️ 컴퓨터의 값 처리 원칙

같은 종류 자료형만 대입 가능하다.

같은 종류 자료형만 계산 가능하다.

계산의 결과도 같은 종류의 값이 나와야 한다.

-> 이러한 원칙이 지켜지지 않은 경우에 형변환이 필요하다.

 

 

 

 

 

1. 암시적(자동) 형변환 (Implicit or Automatic Casting)

암시적 형변환은 작은 크기의 데이터 타입이 큰 크기의 데이터 타입으로 자동으로 변환되는 것을 말한다.

이때 데이터의 손실이 발생하지 않는다.

암시적 형변환은 자바 컴파일러에 의해 자동으로 처리되며, 개발자가 별도의 코드를 작성하지 않아도 된다.

예를 들어,

 

  • byte에서 short로 형변환
byte myByte = 10;
short myShort = myByte; // byte를 short로 암시적 형변환

 

  • short에서 int로 형변환
short myShort = 100;
int myInt = myShort; // short를 int로 암시적 형변환

 

  • int에서 long으로 형변환
int myInt = 1000;
long myLong = myInt; // int를 long으로 암시적 형변환

 

  • float에서 double로 형변환
float myFloat = 3.14f;
double myDouble = myFloat; // float를 double로 암시적 형변환

 

데이터 손실 없이 더 큰 데이터 타이븡로 값이 확장되는 경우에 발생한다.

예를 들어, int 값을 double로 변환할 때 소수점 이하 자리가 추가되어 확장된다.

 

 

 

 

 

 

2. 명시적(강제) 형변환 (Explicit or Type Casting)

명시적 형변환은 변수나 값의 타입을 다른 타입으로 변환하는 과정을 말한다.

이는 큰 크기의 데이터 타입을 작은 크기의 데이터 타입으로 변환하거나,

객체 간의 타입 변환이 필요한 경우에 주로 사용된다.

명시적 형변환은 개발자가 수동으로 형변환을 지시하는 것으로, 컴파일러가 알아서 처리하지 않는다.

명시적 형변환은 형변환 연산자인 "(타입)"을 사용하여 수행된다.

이 연산자를 사용하여 값을 다른 타입으로 변환한다.

그러나 주의해야 할 점은 데이터 손실이 발생할 수 있다.

작은 크기의 타입을 큰 크기의 타입으로 변환하는 경우 데이터 손실이 발생하지 않을 가능성이 높다.

 

  • 큰 타입을 작은 타입으로 형변환
double myDouble = 10.5;
int myInt = (int) myDouble; // double을 int로 명시적 형변환, 소수점 이하 부분이 잘림

 

  • 객체 간의 형변환
class Animal { }
class Dog extends Animal { }

Animal myAnimal = new Dog(); // 부모 클래스 타입으로 자식 클래스 객체를 참조, 업캐스팅
Dog myDog = (Dog) myAnimal; // 자식 클래스 타입으로 다시 형변환, 다운캐스팅

 

  • 타입 캐스팅 연산자로 형변환
double myDouble = 7.8;
int myInt = (int) myDouble; // double을 int로 명시적 형변환

 

 

 

 

 

 

 

 

✔️ 데이터 오버플로우(Data Overflow)

컴퓨터에서 숫자 데이터 타입의 최대치를 초과하여 값을 저장하여고 할 때 발생하는 현상을 말한다.

이는 데이터 타입이 표현할 수 있는 범위를 벗어나는 경우에 발생하며, 예상치 못한 결과를 초래할 수 있다.

 

데이터 오버플로우는 주로 정수나 부동소수점 등의 숫자 타입에서 발생하는데,

데이터 타입의 비트 수가 한정되어 있기 때문이다.

예를 들어, 8비트로 표현 가능한 정수 값의 범위는 -128부터 127까지인데,

만약 8비트 정수로 130을 저장하려고 하면 데이터 오버플로우가 발생하게 된다.

 

데이터 오버플로우의 결과는 예측 불가능하며, 주로 다음과 같은 상황을 초래할 수 있다.

 

1. 부정확한 결과

값이 예상치와 매우 다른 결과로 나타날 수 있다.

 

2. 프로그램 동작의 불안전성

오버플로우가 발생하면 프로그램이 예상치 못한 방식으로 동작할 수 있다.

 

3. 보안 취약점

오버플로우를 악용하여 악의적인 코드 실행이나 시스템의 취약점을 공격하는 보안 위험이 있다.

 

 

데이터 오버플로우를 방지하기 위해서는 데이터 타입의 범위를 고려하여 값을 적절하게 처리하고, 

오버플로우가 발생할 수 있는 상황을 미리 예방하도록 프로그래밍 해야한다.

 

 

 

'JAVA' 카테고리의 다른 글

객체지향언어란?  (0) 2023.08.17
메서드(Method)란?  (0) 2023.08.17
접근 제어자란? (public, protected, default, private)  (0) 2023.08.17
변수에 대해서  (0) 2023.08.11
public static void main(String[] args) 무슨 의미지?  (0) 2023.08.10