오버로딩
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
오버로딩의 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
오버로딩 예시
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
오버로딩이 아닌 것의 예시
매개변수의 이름이 다른 경우
int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }
리턴타입이 다른 경우
int add(int a, int b) { return a+b; }
long add(int a, int b) { return a+b; }
오버로딩의 장점
1. 같은 기능을 가진 메서드들을 하나의 이름으로 정의할 수 있다. (예 : println() )
- 이름을 기억하기 쉽고 짧게 할 수 있어서 오류의 가능성을 줄일 수 있다.
- 이름을 통해 기능을 쉽게 예측할 수 있다.
2. 메서드의 이름을 절약할 수 있다.
가변인자(varargs)와 오버로딩
가변인자
매개변수의 개수를 동적으로 지정
타입... 변수명
public PrintStream printf(String format, Object... args) {
...
}
가변인자는 항상 마지막 매개변수이어야 한다.
메서드를 호출할 때 인자가 없어도 되고 배열도 인자가 될 수 있다.
가변인자는 내부적으로 배열을 이용하기 때문에 가변인자가 선언된 메서드를 호출할 때마다 배열이 새로 생성된다.
편리하지만, 이 같은 비효율이 발생하기 때문에 꼭 필요한 경우에만 가변인자를 사용하는 것이 좋다.
'JAVA' 카테고리의 다른 글
[OOP] 변수의 초기화 (0) | 2023.03.04 |
---|---|
[OOP] 생성자(Constructor) (0) | 2023.03.03 |
[OOP] 클래스 메서드와 인스턴스 메서드 (0) | 2023.03.01 |
[OOP] JVM의 메모리 구조 (0) | 2023.03.01 |
[OOP] 객체지향언어, 클래스와 객체 (0) | 2023.02.28 |