JAVA_메서드 오버로딩(overloading)
메서드 오버로딩
메서드 오버로딩은 동인한 메서드 시그니처를 사용하는 여러개의 메서드 이다.
이게 뭔말이냐고?
메서드 이름만 같고, 하는일은 다르다 이거다.
비유하면 이렇다.
요즘 편의점에서는 아르바이트생이 뭐 물건 파는것 뿐만 아니라 닭도 튀기고, 삐짜도 굽고 아주 뭘 싹다 한다.
그런데 이 동네 사람들은 좀 버르장머리가 없어서 아르바이트 하는 김철수 씨를 "야! 알바야!"라고 부른다고 치자
그리고 또또 싹바가지가 없어서 뭘 요구 할때 "야! 알바야!" 하고 요구하는것을 손가락으로 가르킨다고 하자.
손놈이 담배를 가르키면서 야!알바야! 하면 담배를 가져다 주고, 피자 6900원 포스터를 가르키면서 하면 삐짜를 구워주는거다.
이렇게 오버로딩이 완성된다.
뭔말이냐고?
하는일은 다 다른일인데, 호출하는 알바생(메서드)는 같다는 거다!
안에 들어가는 변수(손놈이 손가락으로 가르키는 것)에 따라 아르바이트생이 가져다 주는게 달라지는것 처럼 말이다.
이게 오버로딩이다.
코드 예시
public class food {
public static void main(String[] args) {
Food_1 food1 = new Food_1 ();
food1.menu();
food1.menu(5);
food1.menu(15000.0);
food1.menu(5,15000);
}
}
class Food_1{
public void menu() { // 메서드 오버로딩. 같은 이름의 메서드 4개.
System.out.println("메뉴");
}
public void menu(int r) {
System.out.println("치킨 마리 수 = " + r);
}
public void menu(double w) {
System.out.println("치킨의 가격 = " + w );
}
public void menu(double b, double h) {
System.out.println("총 금액 = " + b * h);
}
}
//출력값
메뉴
치킨 마리 수 = 5
치킨의 가격 = 15000
총 금액 = 75000
위의 비유처럼 같은 메서드를 불러오는데, 들어가는 변수에 따라 다른 출력값을 볼 수 있다.
-> 모두 .menu로 메서드를 불러오는데, 치킨 마리 수, 치킨의 가격, 총 금액이 콸콸 나온다
우리가 사용하는 입장에서는 이제 저 한개의 메서드만 알고잇는 상태로 이용하면 그만이니 개꿀이다.
하지만 오버로딩 할때의 주의점이 있다.
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수가 달라야 한다.
- 매개변수의 변수가 달라야 한다.
만약 매개변수의 갯수가 똑같은 메서드인데, 다른 결과를 원한다면? 위의 코드처럼 변수 타입을 바꿔야 한다.
치킨의 마리수, 치킨의 가격 모두 한개의 변수만 받는데, 잘 작동한다.
왜냐?
변수 타입이 다르니까다. 마리수에는 정수형을, 가격은 실수형을 넣으면 그거에 맞춰서 알아서 잘 메서드를 동작시켜준다.
생각보다 굉장히 유용한 기능일 것 같다.