메서드를 호출하는데 인자와 매개변수의 타입이 맞지 않다면 어떻게 해야할까?
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
메서드를 호출할 때 매개변수에 값을 전달하는 것도 결국 변수에 값을 대입하는 것이다. 따라서 앞서 배운 자동 형변환이 그대로 적용된다.
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) // 자동 형변환 완료
🔔 정리
메서드를 호출할 때는 전달하는 인수의 타입과 매개변수의 타입이 맞아야 한다. 단 타입이 달라도 자동 형변환이 가능한 경우에는 호출할 수 있다.