[java] 데이터 타입 변환의 유형(예: 오버플로우, 언더플로우)

Java에서는 다양한 데이터 타입 변환이 가능합니다. 데이터 타입 변환은 변수의 값을 다른 데이터 타입으로 변환하는 과정을 의미합니다. 이때, 데이터 타입 변환에는 다양한 유형이 존재합니다. 아래에서는 데이터 타입 변환의 주요 유형에 대해 알아보겠습니다.

1. 원시 타입간 변환

1.1. 숫자 타입 변환

Java에서는 숫자 타입 간의 변환을 수행할 수 있습니다. 이때, 크기가 작은 타입에서 큰 타입으로의 변환(확대 변환)은 암시적으로 이루어집니다. 예를 들어, int 타입의 값을 long 타입으로 할당하면 별도의 변환 연산이 필요하지 않습니다.

int number = 10;
long bigNumber = number; // 암시적으로 int 타입에서 long 타입으로 변환됨

반면, 크기가 큰 타입에서 작은 타입으로의 변환(축소 변환)은 명시적으로 이루어져야 합니다. 이때, 데이터 손실의 가능성을 염두에 두고 변환을 수행해야 합니다. 명시적으로 변환하기 위해서는 변환 대상 타입을 명시하면 됩니다.

long bigNumber = 10000000000L;
int number = (int) bigNumber; // 명시적으로 long 타입을 int 타입으로 변환

1.2. 문자 타입 변환

문자 타입인 char와 숫자 타입인 int 간에는 자동으로 변환될 수 있습니다. char 타입에서 int 타입으로의 변환은 내부적으로 유니코드 값으로 변환되며, int 타입에서 char 타입으로의 변환은 연산 결과로 얻은 유니코드 값을 문자로 변환합니다.

char ch = 'A';
int asciiValue = ch; // 'A'의 유니코드 값(65)으로 변환됨

int number = 65;
char convertedChar = (char) number; // 65에 해당하는 문자 'A'로 변환됨

2. 객체 타입간 변환

2.1. 상속 관계에서의 타입 변환

Java에서는 상속 관계에 있는 클래스 간에는 자동으로 형 변환이 가능합니다. 즉, 부모 클래스 타입의 변수에 자식 클래스 객체를 할당할 수 있습니다. 이를 업캐스팅이라고도 합니다.

class Parent {
    // 부모 클래스 코드
}

class Child extends Parent {
    // 자식 클래스 코드
}

Parent parent = new Child(); // 자식 클래스 객체가 부모 클래스 타입으로 변환됨

반대로, 부모 클래스 타입의 변수를 자식 클래스 타입으로 변환하기 위해서는 명시적인 형변환을 수행해야 합니다. 이때, 객체가 실제로 해당 자식 클래스의 인스턴스인지를 확인해야 합니다.

Parent parent = new Child();
Child child = (Child) parent; // 명시적으로 부모 클래스를 자식 클래스로 변환

2.2. 인터페이스 타입 변환

인터페이스도 클래스와 마찬가지로 타입 변환이 가능합니다. 인터페이스 간의 타입 변환은 자동으로 이루어지며, 명시적인 형변환을 수행할 필요가 없습니다.

interface Interface1 {
    // 인터페이스 메서드 정의
}

interface Interface2 {
    // 인터페이스 메서드 정의
}

class MyClass implements Interface1, Interface2 {
    // 클래스 코드
}

Interface1 myInterface = new MyClass(); // MyClass 객체가 Interface1 타입으로 변환됨
Interface2 myOtherInterface = (Interface2) myInterface; // 명시적으로 Interface1을 Interface2로 변환

참고 자료

위 자료들은 Java 데이터 타입 변환에 대해 더 자세한 정보를 제공합니다.