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

Software Development/Java

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

SeongHo5 2023. 9. 11. 20:42

 

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

 

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

 

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

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

메소드 오버로딩(Method Overloading)

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

JAVA
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)

  • 부모 클래스에서의 접근 제어자보다 더 넓어질 수 있다.
  • 메소드명을 변경할 수 없다.
  • 리턴 타입이 같아야 한다.
  • 매개변수(파라미터)가 같아야 한다.

JAVA
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(); // "개는 멍멍" 출력 } }