Java - 오버로딩

WooHyeong·2024년 3월 25일
0

Java

목록 보기
4/4

오버로딩

한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.
이렇게 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '오버로딩(overloading)'이라고 부른다.

오버로딩의 조건

  1. 메서드의 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.

위 조건을 만족시키지 못하는 메서드는 중복 정의로 간주되어 에러가 발생한다.
오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 오버로딩을 구현하는데 영향을 주지 못한다.

오버로딩의 장점

  1. 같은 기능을 하는 메서드들을 구분할 필요가 없다.
    만약 메서드도 변수처럼 이름만으로 구별된다면, 같은 기능을 하는 메서드임에도 불구하고 여러개의 메서드 네임을 가져야 할 것이다. 그렇게 되면 메서드를 사용하는 쪽에서 같은 기능을 하는 여러 메서드의 이름을 기억해야 하는 부담이 생긴다.

  2. 메서드의 이름을 절약할 수 있다. 만약 같은 기능을 하는데 여러 메서드를 정의한다면 그만큼 메서드 이름도 많이 소모가 될 것이다. 그럼 메서드 이름을 짓는 것이 점점 복잡하고 고민이 될 것이다.

가변인자와 오버로딩

JDK 1.5부터 매개변수의 개수를 동적으로 지정해 줄 수 있게 되었다. 이 기능을 '가변인자(variable arguments)'라고 한다.

ex) public PrintStream printf(String format, Object... args) { ... }

예시와 같이 가변인자 외에도 매개변수(String format)이 더 있다면 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.

여러 숫자를 모두 더하는 add 메서드를 작성한다면

int add (int a, int b) { ... }
int add (int a, int b, int c) { ... }
int add (int a, int b, int c, int d) { ... }

이것을 가변인자를 사용하여 메서드 하나로 대체할 수 있다.

int add (int... args) { ... }

가변인자가 선언된 메서드는 호출할 때마다 배열을 새로 생성한다. 가변인자가 편리하지만, 이런 비효율이 있다고 한다. 내가 생각하기에 배열을 새로 생성하는 것이나 배열로 인한 고정 크기의 메모리를 잡아먹는 것이 비효율을 발생시킨다는 것을 뜻하지 않을까 싶다.
그러므로 꼭 필요한 경우에만 가변인자를 사용한다.

가변인자를 선언한 메서드를 오버로딩하면, 메서드를 호출했을 때 구별되지 못하는 경우가 발생하기 쉽기 때문에 주의해야 한다. 가능하면 가변인자를 사용한 메서드는 오버로딩하지 않는 것이 좋다.

profile
화이링~!

0개의 댓글