IT/JAVA

[JAVA] 메소드 오버로딩이 뭘까?

Buang 2023. 3. 27. 13:20
반응형

 

메소드 오버로딩 정의

 

 

똑같은 이름의 메서드를 중복해서 사용하는 걸 메서드 오버로딩이라고 한다.

 

즉 내가 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