자바(Java)에서 형 변환은 서로 다른 데이터 타입 간의 호환성을 유지하면서 데이터를 처리할 수 있게 하는 중요한 작업입니다. 이번 글에서는 자동 형 변환(Implicit Casting), 명시적 형 변환(Explicit Casting), 객체 간의 형 변환, 그리고 문자열과 기본 타입 간 변환까지 모두 다루어봅니다.
1. 자동 형 변환 (Implicit Casting)
자동 형 변환은 작은 데이터 타입에서 큰 데이터 타입으로 변환될 때 자바가 자동으로 수행하는 형 변환입니다. 예를 들어, int
에서 long
으로 변환하거나 float
에서 double
로 변환할 때 발생합니다. 데이터 손실 위험이 없기 때문에 별도의 형 변환 코드를 작성할 필요가 없습니다.
public class ImplicitCastingExample { public static void main(String[] args) { int numInt = 100; long numLong = numInt; // int에서 long으로 자동 형 변환 float numFloat = numLong; // long에서 float으로 자동 형 변환 System.out.println("int to long: " + numLong); System.out.println("long to float: " + numFloat); } }
2. 명시적 형 변환 (Explicit Casting)
큰 데이터 타입에서 작은 데이터 타입으로 변환할 때 명시적 형 변환이 필요합니다. 명시적 형 변환은 데이터 손실 가능성이 있으므로 주의해야 하며, 캐스트 연산자를 사용해 형 변환을 명시해야 합니다.
public class ExplicitCastingExample { public static void main(String[] args) { double numDouble = 100.99; int numInt = (int) numDouble; // double에서 int로 명시적 형 변환 System.out.println("double to int: " + numInt); } }
3. 객체 간 형 변환 (객체 캐스팅)
객체 형 변환은 클래스 계층 구조에서 상위 클래스와 하위 클래스 간의 변환에 해당합니다. 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)으로 나눌 수 있습니다.
- 업캐스팅: 하위 클래스에서 상위 클래스로 변환합니다. 자동으로 변환됩니다.
- 다운캐스팅: 상위 클래스에서 하위 클래스로 변환하며, 명시적으로 변환을 지정해야 합니다.
class Animal { public void sound() { System.out.println("Animal sound"); } } class Dog extends Animal { public void bark() { System.out.println("Dog barking"); } } public class CastingExample { public static void main(String[] args) { Animal animal = new Dog(); // 업캐스팅 if (animal instanceof Dog) { // 다운캐스팅 Dog dog = (Dog) animal; dog.bark(); } } }
4. 문자열과 기본 타입 간 형 변환
문자열과 기본 타입 간 형 변환은 데이터 입력이나 출력을 위해 자주 사용됩니다.
문자열을 기본 타입으로 변환
문자열을 기본 타입으로 변환할 때는 래퍼 클래스의 parse
메서드를 사용합니다.
public class StringToPrimitiveExample { public static void main(String[] args) { String strInt = "123"; int numInt = Integer.parseInt(strInt); // 문자열을 int로 변환 System.out.println("String to int: " + numInt); } }
기본 타입을 문자열로 변환
기본 타입을 문자열로 변환하려면 String.valueOf()
나 toString()
메서드를 사용합니다.
public class PrimitiveToStringExample { public static void main(String[] args) { int numInt = 123; String strInt = String.valueOf(numInt); // int를 문자열로 변환 System.out.println("int to String: " + strInt); } }
5. 박싱(Boxing)과 언박싱(Unboxing)
자바의 오토박싱은 기본 타입을 객체로 변환하고, 언박싱은 객체 타입을 기본 타입으로 변환하는 작업입니다.
public class BoxingUnboxingExample { public static void main(String[] args) { int num = 100; Integer boxedNum = num; // 오토박싱 int unboxedNum = boxedNum; // 언박싱 System.out.println("Auto-boxing: " + boxedNum); System.out.println("Unboxing: " + unboxedNum); } }
자바에서 형 변환을 정확하게 이해하고 활용하면 더 안전하고 유연하게 코드를 작성할 수 있습니다. 이 글에서는 자동 형 변환, 명시적 형 변환, 객체 캐스팅, 문자열 변환을 모두 다루었습니다. 자바의 형 변환을 이해하는 데 도움이 되길 바랍니다!