이끌든지 따르든지 비키든지

Software Development/Java

[JAVA] 메소드 오버로딩 & 오버라이딩

SeongHo5 2023. 9. 11. 20:42

 

JAVA에서는 객체지향 프로그래밍의 특징 중 하나인 다형성(Polymorphism)을 구현하기 위해 메소드 오버라이딩, 메소드 오버로딩 2가지 방식을 사용한다.

 

두 단어가 비슷하고 부모 클래스로부터 상속 받은 메소드를 사용한다는 점이 같아 헷갈려하는 사람이 많다.

 

두 방식의 개념을 1줄로 요약하자면..

메소드 오버로딩 - 새로운 메소드를 정의하는 것
메소드 오버라이딩 - 기존에 있던 메소드 재정의하는 것

메소드 오버로딩(Method Overloading)

  • 모든 접근 제어자(public, private, protected ···)를 사용할 수 있다.
  • 메소드명을 변경할 수 없다.
  • 리턴 타입이 달라도 된다.
  • 매개변수(파라미터)가 달라야 한다.
  • 같은 클래스 내에서만 적용할 수 있다.
class Calculator {
    int add(int num1, int num2) {
        return num1 + num2;
    }

    double add(double num1, double num2) {
        return num1 + num2;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        int result1 = calculator.add(5, 10);
        double result2 = calculator.add(3.5, 2.5);
        System.out.println("결과 1 : " + result1);
        System.out.println("결과 2 : " + result2);
    }
}

메소드 오버라이딩(Method Overriding)

  • 부모 클래스에서의 접근 제어자보다 더 넓어질 수 있다.
  • 메소드명을 변경할 수 없다.
  • 리턴 타입이 같아야 한다.
  • 매개변수(파라미터)가 같아야 한다.
class Animal {
    void makeSound() {
        System.out.println("동물이 소리를 낸다.");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("개는 멍멍");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.makeSound(); // "개는 멍멍" 출력
    }
}