중앙정보기술인재개발원/JAVA

[JAVA] 형변환 | promotion, type casting

soidev 2025. 3. 11. 17:09

 

Promotion, Type Casting

 

public class P6 {
    public static void main(String[] args) {
        int a = 10;
        a = 20;
        a = 30;
        //a = 20.1; //타입 미스매치(중요한 표현) 오류뜸 선언한게 int기 때매 실수형은 못 들어감 정수형만 가능

        double b = 20.1; // 변수명 중복 안됨
        b = 30.3333;
        b = 10;  //타입 미스매치!

        System.out.println(b);
    }
}

 

 

 

 

1️⃣ Promotion (자동 변환)

작은 데이터 타입 → 큰 데이터 타입 (자동 변환)
💡 데이터 손실이 없으므로 컴파일러가 자동으로 변환해줌.

🔹 예제

public class Main {
    public static void main(String[] args) {
        int numInt = 10;
        double numDouble = numInt;  // int → double 자동 변환 (Promotion)

        System.out.println(numDouble);  // 출력: 10.0
    }
}

 

✅ int → double 자동 변환!
✅ 10이 10.0으로 변환됨.

 

🔹 예제

public class P3 {
    public static void main(String[] args) {
        //char 문자형! - 사실 숫자
        //사실상 프로그래밍 할대는 char은 거의 사용하지 않고
        //기본타입은 아니지만 String을 사용한다.

        char a = 97; //자바에선 2byte 얜 문법
        System.out.println(a);  //대문자 A 65

        String ss = "안녕하세요";  //기본 타입은 아니다!
        //문법적으로 사용한 키워드가 아님 : String  API
        System.out.println(ss);
    }
}

 

✅ 97 → a | 65 → A
✅ String은 기본 타입이 아님!

 

 

 

 

 

 

이런식으로 에러 뜸

 


2️⃣ Casting (명시적 변환)

큰 데이터 타입 → 작은 데이터 타입 (자동 변환 불가, 명시적 변환 필요)
💡 데이터 손실 발생 가능함. (소수점 버림 등)

🔹 예제

public class Main {
    public static void main(String[] args) {
        double pi = 3.14;
        int intPi = (int) pi;  // double → int (Casting)

        System.out.println(intPi);  // 출력: 3 (소수점 손실)
    }
}

✅ double → int 변환할 때 (int)을 붙여야 함.
❌ 소수점 이하가 버려짐(손실 발생).


3️⃣ Promotion과 Casting 비교

변환 예시변환 방식설명

int → double Promotion (자동 변환) 작은 데이터 타입 → 큰 데이터 타입
float → double Promotion (자동 변환) 작은 데이터 타입 → 큰 데이터 타입
double → int Casting (명시적 변환 필요) 소수점 손실 가능, (int) 사용
long → short Casting (명시적 변환 필요) 데이터 손실 가능, (short) 사용

📌 결론

Promotion (자동 변환)Casting (명시적 변환)

변환 방향 작은 타입 → 큰 타입 큰 타입 → 작은 타입
변환 방식 자동 변환 (타입명)을 붙여야 함
데이터 손실 ❌ 없음 ✅ 가능 (소수점 손실 등)
예제 int → double double → int (int 사용)

🔥 즉, Promotion은 안전한 자동 변환, Casting은 데이터 손실 가능성이 있는 강제 변환!

 

 

 

참고

리터럴 (Literal)

  • 고정된 값을 가진 데이터
  • 프로그램에서 직접 사용할 수 있는 숫자, 문자, 문자열, 불리언 값 등

'중앙정보기술인재개발원 > JAVA' 카테고리의 다른 글

[JAVA] Scanner  (1) 2025.03.17
[2주차] 연산자  (0) 2025.03.12
[JAVA] Garbage Colletion(가비지 컬렉션)  (1) 2025.03.12
2주차 [개발 환경 세팅하기]  (1) 2025.03.10
1주차 정리  (0) 2025.03.07