백엔드/JAVA_이론공부

JAVA_메서드 오버로딩(overloading)

반 불혹 2022. 9. 4. 20:14

메서드 오버로딩

메서드 오버로딩은 동인한 메서드 시그니처를 사용하는 여러개의 메서드 이다.

이게 뭔말이냐고?

메서드 이름만 같고, 하는일은 다르다 이거다. 

비유하면 이렇다.

이제는 편의점에서도 피자를.... 달려라 편돌이!

요즘 편의점에서는 아르바이트생이 뭐 물건 파는것 뿐만 아니라 닭도 튀기고, 삐짜도 굽고 아주 뭘 싹다 한다.

그런데 이 동네 사람들은 좀 버르장머리가 없어서 아르바이트 하는 김철수 씨를 "야! 알바야!"라고 부른다고 치자

그리고 또또 싹바가지가 없어서 뭘 요구 할때 "야! 알바야!" 하고 요구하는것을 손가락으로 가르킨다고 하자.

손놈이 담배를 가르키면서 야!알바야! 하면 담배를 가져다 주고, 피자 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로 메서드를 불러오는데, 치킨 마리 수, 치킨의 가격, 총 금액이 콸콸 나온다

우리가 사용하는 입장에서는 이제 저 한개의 메서드만 알고잇는 상태로 이용하면 그만이니 개꿀이다.

하지만 오버로딩 할때의 주의점이 있다. 

  1. 메서드의 이름이 같아야 한다.

  2. 매개변수의 개수가 달라야 한다.

  3. 매개변수의 변수가 달라야 한다. 

만약 매개변수의 갯수가 똑같은 메서드인데, 다른 결과를 원한다면? 위의 코드처럼 변수 타입을 바꿔야 한다. 

치킨의 마리수, 치킨의 가격 모두 한개의 변수만 받는데, 잘 작동한다.

왜냐?

변수 타입이 다르니까다. 마리수에는 정수형을, 가격은 실수형을 넣으면 그거에 맞춰서 알아서 잘 메서드를 동작시켜준다. 

생각보다 굉장히 유용한 기능일 것 같다.