CodingTest/Java Grammar Notes

[Java] 데이터 타입 변환 (형 변환)

조 수빈 2024. 12. 9. 20:10

🔍 데이터 타입 변환 (형 변환, Type Casting)

형 변환은 데이터를 다른 타입으로 변경하는 작업
자바에서는 기본 타입(Primitive Type)과 참조 타입(Reference Type)을 변환하는 다양한 방법이 제공됨


✨ 결론

자동 형 변환명시적 형 변환

  1. 자동 형 변환은 JVM이 안전하다고 판단되면 스스로 수행함
  2. 명시적 형 변환는 직접 형 변환을 지정해주는 것이며, 데이터 손실 가능성을 주의해야 함

기본 타입 ↔ String 변환 시, String.valueOfparseInt/parseDouble 등의 메서드를 활용할 것

형 변환유연성을 제공하지만, 적절히 사용하지 않으면 오류와 데이터 손실이 발생할 수 있으니 주의하여 사용할 것


🔄 기본 타입 간 형 변환

자바의 기본 타입 간 변환은 자동 형 변환(implicit casting)과 명시적 형 변환(explicit casting)으로 나뉨

자동 형 변환 (Implicit Casting)

작은 데이터 타입 → 큰 데이터 타입으로 변환 시, JVM이 자동으로 변환함

예제: intdouble

public class ImplicitCasting {
    public static void main(String[] args) {
        int num = 10;
        double result = num;  // 자동 형 변환
        System.out.println("int에서 double로 변환: " + result);  // 10.0 출력
    }
}

예제: charint

char는 내부적으로 유니코드 값(정수)를 저장하므로, 변환이 가능함

public class CharToInt {
    public static void main(String[] args) {
        char c = 'A';
        int ascii = c;  // 자동 변환
        System.out.println("char에서 int로 변환: " + ascii);  // 65 출력
    }
}

명시적 형 변환 (Explicit Casting)

큰 데이터 타입 → 작은 데이터 타입으로 변환 시, 데이터 손실 위험이 있으므로 명시적으로 캐스팅해야 함

예제: doubleint

public class ExplicitCasting {
    public static void main(String[] args) {
        double num = 10.99;
        int result = (int) num;  // 명시적 형 변환
        System.out.println("double에서 int로 변환: " + result);  // 10 출력
    }
}

예제: intchar

public class IntToChar {
    public static void main(String[] args) {
        int num = 66;
        char c = (char) num;  // 명시적 변환
        System.out.println("int에서 char로 변환: " + c);  // 'B' 출력
    }
}

🔀 기본 타입 ↔ String 변환

intString 변환

예제: intString

public class IntToString {
    public static void main(String[] args) {
        int num = 123;
        String str = String.valueOf(num);     // 방법 1
        String str2 = Integer.toString(num);  // 방법 2
        System.out.println("int에서 String으로 변환: " + str);
    }
}

예제: Stringint

public class StringToInt {
    public static void main(String[] args) {
        String str = "123";
        int num = Integer.parseInt(str);  // 방법 1
        int num2 = Integer.valueOf(str);  // 방법 2
        System.out.println("String에서 int로 변환: " + num);
    }
}

doubleString 변환

예제: doubleString

public class DoubleToString {
    public static void main(String[] args) {
        double num = 123.45;
        String str = String.valueOf(num);  // 방법 1
        String str2 = Double.toString(num);  // 방법 2
        System.out.println("double에서 String으로 변환: " + str);
    }
}

예제: Stringdouble

public class StringToDouble {
    public static void main(String[] args) {
        String str = "123.45";
        double num = Double.parseDouble(str);  // 방법 1
        double num2 = Double.valueOf(str);  // 방법 2
        System.out.println("String에서 double로 변환: " + num);
    }
}

charString 변환

예제: charString

public class CharToString {
    public static void main(String[] args) {
        char c = 'A';
        String str = String.valueOf(c);  // 방법 1
        String str2 = Character.toString(c);  // 방법 2
        System.out.println("char에서 String으로 변환: " + str);
    }
}

예제: Stringchar

public class StringToChar {
    public static void main(String[] args) {
        String str = "A";
        char c = str.charAt(0);  // 첫 번째 문자 추출
        System.out.println("String에서 char로 변환: " + c);
    }
}

⚠️ 주의

1️⃣ 데이터 손실 문제

큰 타입 → 작은 타입으로 변환할 때, 데이터 손실이 발생할 수 있음

public class DataLossExample {
    public static void main(String[] args) {
        int largeNum = 128;
        byte smallNum = (byte) largeNum;  // 128은 byte 범위 초과 (-128~127)
        System.out.println("데이터 손실 발생: " + smallNum);  // -128 출력
    }
}

2️⃣ NumberFormatException 예외

String을 숫자로 변환할 때, 형식이 맞지 않으면 예외가 발생함

public class NumberFormatExample {
    public static void main(String[] args) {
        String invalidNumber = "123a";  // 숫자가 아님
        try {
            int num = Integer.parseInt(invalidNumber);
        } catch (NumberFormatException e) {
            System.out.println("형식이 잘못된 String: " + invalidNumber);
        }
    }
}

'CodingTest > Java Grammar Notes' 카테고리의 다른 글

[Java] Deque  (1) 2025.03.24
[Java] 딕셔너리, Map  (3) 2024.12.20
[Java] StringTokenizer, String.split()  (0) 2024.12.12
[Java] BufferedReader, Scanner  (2) 2024.12.05