Java

Java 11. Method Overloading(오버로딩)

지댕댕 2023. 3. 10. 19:09
728x90

Method Overloading 란 같은 이름의 메서드를 여러 개 정의하는 것, 메서드의 파라미터의 타입 또는 개수가 다를 때 over loading 할 수 있음. 주의할 점은 메서드의 파라미터는 같고 리턴 타입만 다르게 overloading 할 수는 없음. (리턴 타입이 다르다고 해서 over loading 할 수 있는 것이 아니다.)

메서드 오버로딩을 이해하기 위해서는 먼저 메서드 시그니처의 의미를 알아야 한다. 메서드 시그니처는 메서드 명과 입력매개변수의 자료형을 말한다. 시그니처라는 말에서 유추할 수 있듯이 메서드를 구분하는 기준 역할을 한다. 자바 가상 머신은 메서드 시그니처가 다르면 메서드명이 동일해도 다른 메서드로 인식한다. 메서드 오버로딩은 이러한 특징을 이용한 것으로, 입력매개변수의 개수나 자료형이 다른 여러 개의 동일한 이름을 지닌 메서드를 같은 공간에 정의하는 것을 말한다. (3개의 동일한 이름을 지닌 이미지 jpg, png, bmp를 동일한 폴더에 저장할 수 있다는 것과 같은 원리다. 파일명은 동일하지만 확장자는 다르기 때문!)

오버로딩된 메서드의 호출은 메서드 호출과 전혀 다를 게 없다. 다만 동일한 이름의 메서드가 많을 때에는 입력매개변수에 따라 실제 어떤 메서드가 호출된 것인지만 구분해 주면 된다.

여러 개의 메서드가 오버로딩 되어 있으며, 각각은 서로 다른 입력매개변수의 개수나 타입을 포함하고 있다는 것을 알 수 있다. 즉, 서로 다른 메서드 시그니처를 지니고 있고, 따라서 호출할 때 넘겨주는 입력매개변수에 따라 호출될 메서드가 선택된다. 알게 모르게 우리는 자연스럽게 화면에 출력하기 위해 System.out.println(); 메서드를 많이 사용해 왔다.

오버로딩의 조건

간은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니다. 오버로딩이 성립하기 위해서는 1. 메서드 이름이 같아야 하고 2. 매개변수의 개수 또는 타입이 달라야 된다. 비록 메서드의 이름이 같다고 하더라도 매개변수가 다르면 서로 구별될 수 있기 때문에 오버로딩이 가능한 것이다. 두 개의 조건을 만족시키지 못하는 메서드는 중복 정의로 간주되어 컴파일 시에 에러가 발생한다. 그리고 오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다는 것에 주의해야 한다!!

오버로딩의 장점

오버로딩을 구현함으로써 얻는 이득은 무엇일까? 만일 메서드도 변수처럼 단지 이름만으로 구변된다면, 한 클래스 내의 모든 메서드들은 이름이 달라야 한다. 위의 출력문에서 모두 근본적으로는 같은 기능을 하는 메서드들이지만, 서로 다른 이름을 가져야 하기 때문에 메서드를 작성하는 쪽에서는 이름을 짓기도 어렵고, 메서드를 사용하는 쪽에서는 이름을 일일이 구분해서 기억해야 하기 때문에 서로 부담이 된다.

 

728x90