[JAVA] 메소드 오버로딩

2023. 2. 28. 16:25카테고리 없음

메소드 오버로딩이란 이름이 같은 메소드를 여러 개 정의하는 것입니다.

 

동일한 이름을 사용하려면 매개변수의 개수나 자료형을 다르게 해야 한다는 조건이 있습니다.

변환형만 다르게 하는 것은 인정되지 않으니 반드시 주의하여야 합니다.

 

아래와 같이 제곱값을 구하는 메소드 square()를 여러 개 정의하였을 때

정수값의 제곱을 계산하는 square(), 실수값의 제곱을 계산하는 square()를 만들 수 있습니다

 

< 정수값 제곱, 실수값 제곱>

public class Mymath {
	// 정수값을 제곱하는 메소드
    	int square(int i) {
        	return i * i;
            
            }
	//실수값을 제곱하는 메소드
	double square(double i) {  //매개변수가 다르니 메소드 이름이 같아도 문제가 발생하지 않습니다.
    	return i * i;
        
        }}

 

 

square()에 byte. short, float 값도 전달할 수 있으며 byte와 short 값을 전달하면 자바는  int형으로 자동 변환합니다.

따라서 이 경우엔 square(int)가 호출되는 것입니다.

또 folat 값을 전달하면 자바가 이것을 자동적으로 double 형으로 변환하기 때문에 square(double)가 호출됩니다.

하지만 자동적인 변환은 매개변수와 인수의 명백한 일치가 없을 때만 적용됩니다.

 

예를 들어

short형을 처리하는 square(short)가 정의되어 있다면 short 값을 int로 변환하지 않고 그대로 short가 출력되는 것입니다.

 

메소드 오버로딩은 왜 유용할까요?

 

만약 메소드 오버로딩을 사용하지 않으면 데이터의 종류에 따라 제곱을 계산하는 메소드의 이름을 전부 다르게 지어야 합니다.

하지만 메소드 오버로딩을 사용한다면 square()라는 이름을 중복하여 사용할 수 있기에 조금 더 유용하다고 볼 수 있습니다.

 

또 메소드 오버로딩을 사용하는 가장 대표적인 메소드가 println()이라고 합니다.

println에서는 입력되는 어떠한 데이터들을 다 출력할 수 있도록 오버로딩 해놨기 때문입니다.