-
출처: https://medium.com/@mesfandiari77 오버로딩(Overloading)
- 같은 이름의 메서드를 매개변수를 달리해서 여러 번 정의
- 같은 이름의 메서드를 여러 개 정의하는 것
- 단, 메서드의 매개변수가 달라야 한다
- 같은 클래스 안에서 이루어진다
특징
- 메서드 이름은 같지만 매개변수의 개수, 타입, 순서가 달라야 한다
- 리턴 타입은 달라도 되지만 매개변수로만 구분
- 프로그램 실행 전에 결정
예)
class Calculator { int add(int a, int b) { return a + b; // 정수 덧셈 } double add(double a, double b) { return a + b; // 실수 덧셈 } int add(int a, int b, int c) { return a + b + c; // 정수 세 개의 덧셈 } } public class Main { public static void main(String[] args) { Calculator calc = new Calculator(); System.out.println(calc.add(3, 5)); // 출력: 8 System.out.println(calc.add(3.5, 4.2)); // 출력: 7.7 System.out.println(calc.add(1, 2, 3)); // 출력: 6 } }
Overriding (오버라이딩)
- 부모 클래스나 인터페이스의 메서드를 자식 클래스에서 재정의하는 것
- 부모 메서드를 재정의하여 자식 클래스에 맞게 변경
- 상속 관계에서 이루어진다
특징
- 메서드 이름, 매개변수, 리턴 타입이 부모와 완전히 동일해야 한다
- 부모의 기능을 유지하거나 새롭게 재정의
- 프로그램 실행 중에 결정
- @Override 애너테이션을 사용하는 것이 좋다
예)
class Parent { void sayHello() { System.out.println("Hello from Parent!"); } } class Child extends Parent { @Override void sayHello() { // 부모의 메서드를 재정의 System.out.println("Hello from Child!"); } } public class Main { public static void main(String[] args) { Parent parent = new Parent(); parent.sayHello(); // 출력: Hello from Parent! Parent child = new Child(); child.sayHello(); // 출력: Hello from Child! } }
특징 Overloading Overriding 클래스 관계 같은 클래스 부모-자식 클래스 (상속 관계) 메서드 이름 동일 동일 매개변수 달라야 함 완전히 동일 리턴 타입 달라도 가능 동일해야 함 실행 시점 컴파일 타임 런타임 키워드 필요 없음 @Override 권장
@Override
- Java에서 메서드를 재정의할 때 사용하는 애너테이션
- 부모 클래스 또는 인터페이스의 메서드를 자식 클래스에서 재정의(오버라이드)하고 있음을 컴파일러에 알림
- 코드의 가독성이 높아지고, 재정의 과정에서 실수를 방지
장점
- 컴파일 오류 방지
- 부모 클래스의 메서드 이름이나 시그니처를 잘못 입력했을 경우, 컴파일 시 오류를 발생시켜 실수를 잡아준다
- 가독성 향상
- 이 메서드가 부모 클래스의 메서드를 재정의한 것임을 다른 개발자들이 바로 이해할 수 있다
- 일관성 유지
- 코드 리뷰 및 유지보수 시, 의도적으로 재정의한 메서드임을 명확히 알 수 있다
예)
class Parent { void sayHello() { System.out.println("Hello from Parent!"); } } class Child extends Parent { @Override void sayHello() { // 부모 메서드 재정의 System.out.println("Hello from Child!"); } } public class OverrideExample { public static void main(String[] args) { Parent obj = new Child(); obj.sayHello(); // 출력: Hello from Child! } }
💥 실수 방지
class Parent { void sayHello() { System.out.println("Hello from Parent!"); } } class Child extends Parent { @Override void sayHelloo() { // 오타로 인해 부모 메서드를 재정의하지 못함 System.out.println("Hello from Child!"); } }
'CS > JAVA' 카테고리의 다른 글
JAVA 8, JAVA 11 (0) 2025.02.28 [Java] Math 클래스 (0) 2025.02.13 JAVA(1) (0) 2025.01.14 댓글