메소드 오버로딩(Overloading)의 정의
메서드 오버로드를 사용하면 동일한 클래스 내에서 이름은 같지만 매개 변수 목록이 다른 여러 메서드를 정의할 수 있습니다. 컴파일러는 메서드에 전달된 인수의 수, 유형 및 순서에 따라 호출할 메서드를 결정합니다.
오버로딩의 핵심 사항
다음은 메서드 오버로딩에 대한 몇 가지 핵심 사항입니다.
1. 오버로드된 메서드는 이름은 같지만 매개변수 목록(매개변수의 번호, 유형 또는 순서)은 달라야 합니다.
2. 메소드의 반환 유형은 메소드 오버로딩에서 역할을 하지 않습니다.
3. 오버로딩을 사용하면 다양한 입력으로 유사한 작업을 수행하는 다양한 방법을 제공할 수 있습니다.
4. 오버로드된 메서드를 사용하여 코드 가독성을 높이고 프로그래머에게 편의성을 제공할 수 있습니다.
5. 메서드 오버로드는 메서드에 전달된 인수를 기반으로 컴파일 타임에 결정됩니다.
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int result1 = calculator.add(3, 4); // Invokes the first add method
double result2 = calculator.add(2.5, 4.7); // Invokes the second add method
System.out.println(result1); // Output: 7
System.out.println(result2); // Output: 7.2
}
}
위의 예에서 Calculator 클래스에는 두 개의 추가 메서드가 있습니다. 하나는 int 매개 변수를 허용하고 다른 하나는 double 매개 변수를 허용합니다. 제공된 인수 유형에 따라 적절한 방법이 선택됩니다.
오버로딩의 사용이유
- 가독성 및 명료성: 동일한 이름을 사용하는 다른 매개변수 목록으로 메서드를 오버로딩하면 코드를 더 읽기 쉽고 쉽게 이해할 수 있습니다. 다른 입력으로 유사한 작업을 수행하는 데 동일한 메서드 이름을 사용할 수 있으므로 코드 명확성이 향상되고 중복이 줄어듭니다.
- 유연성 및 편의성: 메서드 오버로드는 다양한 유형 또는 개수의 인수를 허용할 수 있는 메서드를 정의할 수 있도록 하여 유연성을 제공합니다. 이러한 유연성 덕분에 개발자는 다양한 입력 매개변수와 함께 메서드를 보다 편리하게 사용할 수 있으므로 유사한 작업에 대해 다른 메서드 이름을 기억하고 사용할 필요가 없습니다.
- 코드 재사용성: 오버로딩 메서드는 유사한 작업을 수행하는 메서드의 변형을 제공하여 코드 재사용성을 가능하게 합니다. 메서드 오버로드를 활용하면 매개 변수는 다르지만 동작은 유사한 일련의 관련 메서드를 생성하여 코드 중복을 줄이고 코드 유지 관리성을 향상할 수 있습니다.
- API 디자인: 오버로딩은 다양한 사용자의 요구 사항을 기반으로 메서드를 호출하는 여러 방법을 제공하기 위해 API(응용 프로그래밍 인터페이스)를 디자인하는 데 일반적으로 사용됩니다. 이를 통해 개발자는 필요에 따라 가장 적합한 버전의 메서드를 선택할 수 있으므로 API의 유용성이 향상됩니다.
오버라이딩의 정의(Overriding)
오버라이딩은 하위 클래스가 해당 슈퍼클래스에 이미 정의된 메서드에 대한 특정 구현을 제공할 때 발생합니다. 재정의하는 메서드는 재정의하는 메서드와 동일한 이름, 반환 유형(또는 하위 유형) 및 매개 변수를 가져야 합니다.
오버라이딩의 핵심 사항
다음은 오버라이딩에 대한 몇 가지 핵심 사항입니다.
오버라이딩를 통해 하위 클래스는 상위 클래스에서 상속된 메서드의 자체 구현을 제공할 수 있습니다.
오버라이딩의 목적은 하위 클래스에서 상위 클래스 메서드의 동작을 특수화하거나 수정하는 것입니다.
오버라이딩은 슈퍼클래스 유형의 변수가 하위 클래스 유형의 개체를 보유하고 런타임에 재정의된 메서드를 동적으로 호출할 수 있는 다형성을 달성하는 데 사용됩니다.
오버라이딩은 실제 개체 유형에 따라 런타임에 결정됩니다.
다음은 Java에서 오버라이딩을 보여주는 예입니다.
public class Fruit {
public void test() {
System.out.println("I like Fruit!");
}
}
public class Apple extends Fruit {
@Override
public void test() {
System.out.println("I like Apple");
}
}
public class Main {
public static void main(String[] args) {
Fruit fruit = new Fruit();
fruit.test(); // Output: I like Fruit!
Fruit apple = new Apple();
apple.test(); // Output: I like Apple
}
}
위의 예에서 Animal 클래스에는 makeSound 메서드가 있습니다. Cat 클래스는 Animal을 확장하고 특정 구현으로 makeSound 메서드를 재정의합니다. Animal 참조가 참조하는 Cat 객체에서 makeSound 메서드가 호출되면 Cat 클래스의 재정의된 메서드가 실행됩니다.
오버라이딩 사용이유
- 다형성: 메서드 재정의는 Java에서 다형성을 용이하게 하는 핵심 기능입니다. 이를 통해 서로 다른 유형의 개체를 공통 슈퍼클래스의 개체로 취급할 수 있으며 실제 개체 유형에 따라 런타임에 재정의된 메서드를 호출할 수 있습니다. 다형성은 코드 유연성, 확장성 및 일반 코드 작성 기능을 향상시킵니다.
- 특수화 및 사용자 지정: 메서드 재정의를 통해 하위 클래스에서 상속된 메서드의 특정 구현을 제공할 수 있습니다. 이를 통해 하위 클래스는 자체 요구 사항에 따라 상위 클래스 메서드의 동작을 특수화하거나 수정할 수 있습니다. 사용자 정의를 촉진하고 수퍼 클래스의 기능을 상속하고 확장하는 보다 전문화된 클래스를 생성할 수 있습니다.
- 상속 계층 구조: 재정의 메서드를 사용하면 상속 계층 구조를 설정할 수 있습니다. 여기서 하위 클래스는 상위 클래스의 동작과 특성을 상속하지만 고유한 동작을 제공할 수도 있습니다. 이 계층 구조는 코드 구성을 단순화하고 코드 재사용을 촉진하며 코드 유지 관리 및 발전을 용이하게 합니다.
- 디자인 패턴: 메서드 재정의는 템플릿 메서드, 전략 및 관찰자와 같은 다양한 디자인 패턴을 구현하는 데 자주 사용됩니다. 이러한 패턴은 코드 설계에서 유연성, 모듈성 및 관심사 분리를 달성하기 위해 메서드를 재정의하는 기능과 다형성에 의존합니다.
메서드 오버로딩 및 오버라이딩은 여러 메서드 변형을 제공하여 유연하고 확장 가능한 코드를 작성할 수 있도록 하는 Java의 중요한 도구입니다.
'개발 > 정보공유' 카테고리의 다른 글
[Java] JDK와 JRE의 개념과 차이, Java 버전별 특징과 차이(Java 8,11,17) (0) | 2023.06.19 |
---|---|
[Java] Java Stream의 정의와 주요 기능, 예시 (0) | 2023.06.16 |
[Java] Java에서 제공하는 객체 지향 프로그래밍(OOP) 종류와 기능/예시/장점 (0) | 2023.06.16 |
[Java] Java 애플리케이션 성능 최적화 - Garbeage Collection (0) | 2023.06.15 |
[Java] Java 프레임워크가 제공하는 보안 기능 (0) | 2023.06.14 |
댓글