메소드 오버로딩 정의
똑같은 이름의 메서드를 중복해서 사용하는 걸 메서드 오버로딩이라고 한다.
즉 내가 getNumber라는 함수를 만들었는 데
getNumber 함수 아래에 똑같은 이름(getNumber)을 가진
함수를 또 하나 더 만드는 것이다.
왜 함수 이름을 똑같이 만들어서 생성하는 건지 의문이 들 수 있다.
이번 시간엔 메소드 오버로딩이 왜 필요하고,
메소드 오버로딩을 사용할 수 있는 상황에 대해 이야기하고자 한다.
메소 오버로딩 등장배경
// 정수(int)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumber(int number) {
int result = number * number;
return result;
}
// 문자(string)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumberStr(String strNumber) {
int number = Integer.parseInt(strNumber);
// 문자로 넘어온 값은 숫자로 바꿔줘야 계산이 가능하다.
// 그래서 문자를 정수로 바꿔주는 Integer.parseInt() 사용해서
// strNumber에 저장된 문자형 숫자를 정수형 숫자로 바꿔줬다.
return number * number;
}
정수(int)형을 인자로 받는 getNumber 메서드와
문자(string)형을 인자로 받는 getNumberStr 메서드가 있다.
두 개 메서드모두 어떤 숫자가 들어왔을 때
그 숫자를 곱해주는 똑같은 기능의 메서드다.
예를 들어서 정수형 숫자 3이 getNumber 메서드에 들어왔다면
3 * 3의 결과값인 9가 반환(return)된다.
getNumberStr 메서드의 경우
문자형 숫자 3이 들어온 경우
3 * 3의 결과값인 9가 반환(return)된다.
두 메서드 모두 결과값은 똑같이 반환해준다.
다른 점은 인자로 정수를 받느냐, 문자열을 받느냐의 차이다.
// 정수(int)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumber(int number) {
int result = number * number;
return result;
}
// 문자(string)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumberStr(String strNumber) {
//문자로 넘어온 값은 숫자로 바꿔줘야 계산이 가능하니까
// 문자를 정수로 바꿔주는 Integer.parseInt() 사용한다.
int number = Integer.parseInt(strNumber);
return number * number;
}
public static
void main ( String[] args ) {
System.out.println(getNumber(3)); //3 * 3 = 9
System.out.println(getNumber("4")); //4 * 4 = 16
}
}
System.out을 이용해 하단에 결과값을 출력해주는 걸 작성했다.
getNumber에 인자로 3을 넘겨주면 3 * 3의 결과인 9가 나오고
getNumberStr에 인자로 "4" 넘겨주면 4 * 4의 결과인 16을 확인할 수 있다.
그런데 이렇게 정수, 문자열과 같은 자료형에 따라
메서드 이름을 다르게 하는 건 좀 불편하다.
정수를 인자로 넘겨줄 땐 getNumber 메서드를 사용해야 하고,
문자열을 인자로 넘겨줄 땐 getNumber 메서드를 사용해야 한다.
그냥 getNumber라고 메서드 이름을 통일하고 사용하면 더 편하지 않을까?
이때 등장하는 게 바로 메소드 오버로딩이다.
메소드 오버로딩 예시
똑같은 이름의 함수를 아무 때나 선언할 수 있는 게 아니다.
아래 두 가지 조건 중 하나에 부합해야 메소드 오버로딩을 사용할 수 있다.
1) 전달값의 타입이 다른 경우
2) 전달값의 개수가 다른 경우
즉 전달값의 타입이 다르거나 개수가 다르면
똑같은 이름의 메서드를 중복해서 선언할 수 있다.
위의 두 가지 조건을 예시를 통해 살펴보면 아래와 같다.
1) 전달값의 타입이 다른 경우
// 정수(int)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumber(int number) {
int result = number * number;
return result;
}
// 문자(string)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumber(String strNumber) {
int number = Integer.parseInt(strNumber);
return number * number;
}
위의 코드를 보면 정수를 파라미터로 받을 때도,
문자열을 파라미터로 받을 때도 메서드 이름을 똑같이
getNumber로 설정해 놓은 걸 알 수 있다.
public static
void main ( String[] args ) {
System.out.println(getNumber(3)); //3 * 3 = 9
System.out.println(getNumber("4")); //4 * 4 = 16
}
}
이 상황에서 위와 같이 작성해 주면 9와 16이 잘 출력된다.
전달되는 자료형(정수, 문자열)에 따라서 각 자료형에 맞는
메서드로 인자가 전달된다.
위에서 메서드는 이렇게 자료형이 다를 때 뿐만 아니라
전달하는 값의 개수가 다를 때도 사용할 수 있다.
2) 전달 값의 개수가 다른 경우
public static int getNumber(int number1, int number2) {
int result = number1 + number2;
return result;
}
두 개의 숫자를 인자로 받아서 더해주는 getNumber 메서드를 만들었다.
만약 3과 2를 인자로 받았다면 3 + 2의 값인
5가 result 변수에 저장되고 이 result가 반환된다.
// 문자(string)형 숫자를 인자로 받아서 그 숫자를 곱해주는 것
public static int getNumber(String strNumber) {
//문자로 넘어온 값은 숫자로 바꿔줘야 계산이 가능하니까
// 문자를 정수로 바꿔주는 Integer.parseInt() 사용한다.
int number = Integer.parseInt(strNumber);
return number * number;
}
//인자가 2개인 경우
public static int getNumber(int number1, int number2) {
int result = number1 + number2;
return result;
}
public static
void main ( String[] args ) {
System.out.println(getNumber(5, 3)); //4 * 4 = 16
}
}
맨 위의 getNumber 메서드는 인자를 하나만 받고
아래의 getNumber 메서드는 인자를 두개 받는다.
그리고 하단에 System.out을 통해
5와 3 이 두 개의 인자를 getNumber 메서드에 전달한다고 하면,
인자를 2개 받는 getNumber 함수로 5와 3이 전달된다.
다시 한 번 정리하자면
똑같은 이름의 메서드를 중복해서 사용하는 걸 메서드 오버로딩이라고 한다.
전달값의 타입(정수, 문자열)이 다르거나
전달값의 개수가 다르면(인자 개수)
똑같은 이름의 메서드를 중복해서 선언할 수 있다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 삼항 연산자 사용법 (0) | 2023.03.27 |
---|