반응형
오버로딩이란 ?
같은 기능을 수행하는 메서드가 있다면 파라미터의 타입/갯수/순서가 다르더라도
같은 이름을 부여한다.
- 같은 기능을 수행하지만 다양한 타입의 매개변수를 처리해야 할 때: 예를 들어, add(int a, int b)와 add(double a, double b)라는 두 개의 메서드를 정의하여 정수와 실수의 덧셈을 처리할 수 있습니다.
- 메서드 이름이 직관적이고 일관성을 유지할 수 있을 때: 예를 들어, print(String message)와 print(int number)라는 두 개의 메서드를 정의하여 문자열과 숫자를 출력하는 메서드로 사용할 수 있습니다.
- 기본값이 있는 메서드를 제공할 때: 예를 들어, calculateArea(int length, int width)와 calculateArea(int length)라는 두 개의 메서드를 정의하여 직사각형의 넓이를 계산하는데 필요한 인자를 유연하게 처리할 수 있습니다. 두 번째 메서드는 가로와 세로 길이가 같은 정사각형의 경우에 사용될 수 있습니다.
코드예시)
public class Exam0420 {
static class X {
void m1() {
System.out.println("X의 m1()");
}
void m2() {
System.out.println("X의 m2()");
}
}
static class X2 extends X {
@Override
void m1() {
System.out.println("X2의 m1()");
}
}
static class X3 extends X2 {
@Override
void m2() {
System.out.println("X3의 m2()");
}
}
static class X4 extends X3 {
@Override
void m1() {
System.out.println("X4의 m1()");
}
void test() {
this.m1(); // X4의 m1() : this가 실제 가리키는 인스턴스 클래스를 기준으로 메서드를 찾아 올라 간다.
super.m1(); // X2의 m1() : test()가 소속된 클래스를 기준으로 수퍼 클래스부터 메서드를 찾아 올라간다.
this.m2(); // X3의 m2()
super.m2(); // X3의 m2()
// super.super.m1(); // 컴파일 오류! 이런 문법은 없다! 무협지 문법!
}
}
질문내용)
정리)
정리하자면, 오버로딩은 예를 들어 계산기 프로그램에서 수와 수를 더하는 기능을 수행하는
'plus'라는 메서드가 있을 때 a+b를 더하는 연산에서 a+b+c를 더하는 연산으로 수행할 경우
기존에는 메서드를 하나 더 만들어야하는 문제가 발생하고 개발자는 이러한 메서드의 이름을
기억해야하는 문제가 발생한다.
하지만 plus 라는 동일한 이름을 가진 메서드를 생성하고 파라미터의 유형이나 갯수 순서를 다르게 설정하여도
오버로딩을 통해 동일한 메서드 이름을 사용할 수 있으며 일관된 프로그래밍을 가능하게 해준다.
반응형