✅ 명시적 형변환


메서드를 호출하는데 인자와 매개변수의 타입이 맞지 않다면 어떻게 해야할까?

✏️ MethodCasting1

package method;

public class MethodCasting1 {

  public static void main(String[] args) {
    double number = 1.5;
    // printNumber(number);  // double을 int형에 대입하므로 컴파일 오류
    printNumber((int) number);  // 명시적 형변환을 사용해 double을 int로 형변환
  }

  public static void printNumber(int n) {
    System.out.println("숫자 : " + n);
  }
}

먼저 주석으로 처리해 둔 부분의 주석을 풀고 실행해보자.

printNumber(number);  // double을 int형에 대입하므로 컴파일 오류



✏️ 실행 결과 - 컴파일 오류

java: incompatible types: possible lossy conversion from double to int

다음과 같은 이유로 컴파일 오류가 발생한다.

printNumber(nubmer);  // number는 1.5(실수)
printNumber(1.5);  // 메서드를 호출하기 전에 number 변수의 값을 읽음
void printNumber(int n = 1.5)  // int형 매개변수 n에 double형 실수인 1.5를 대입 시도, 컴파일 오류

이 경우 메서드 호출이 꼭 필요하다면 다음과 같이 명시적 형변환을 사용해야 한다.

printNumber((int) nubmer);  // 명시적 형변환을 사용해 double을 int로 변환
printNumber(1);  // (double) 1.5 -> (int) 1로 변환
void printNumber(int n = 1)  // int형 파라미터 변수 n에 int형 1을 대입



✏️ 실행 결과




✅ 자동 형변환


int < long < double

메서드를 호출할 때 매개변수에 값을 전달하는 것도 결국 변수에 값을 대입하는 것이다. 따라서 앞서 배운 자동 형변환이 그대로 적용된다.

✏️ MethodCasting2

package method;

public class MethodCasting2 {

  public static void main(String[] args) {
    int number = 100;
    printNumber(number);  // int에서 double로 자동 형변환
  }

  public static void printNumber(double n) {
    System.out.println("숫자 : " + n);
  }
}
  • double형 매개변수(파라미터)에 int형 인수를 전달하는데 문제없이 잘 작동한다.



✏️ 실행 결과

다음과 같이 자동 형변환이 동작한다.

printNumber(number);  // number는 int형 100
printNumber(100);  // 메서드를 호출하기 전에 number 변수의 값을 읽음

void printNumber(double n = 100)  // double형 파라미터 변수 n에 int형 값 100을 대입
void printNumber(double n = (double) 100)  // double이 더 큰 숫자 범위이므로 자동 형변환 적용
void printNumber(double n = 100.0)  // 자동 형변환 완료

🔔 정리


메서드를 호출할 때는 전달하는 인수의 타입매개변수의 타입이 맞아야 한다. 단 타입이 달라도 자동 형변환이 가능한 경우에는 호출할 수 있다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글