오버로딩 / 오버라이딩

이수현·2025년 7월 3일

Java

목록 보기
10/10
post-thumbnail

1. 오버로딩(Overloading)

오버로딩은 같은 이름의 메서드를 여러 개 정의하되, 매개변수의 타입이나 개수를 다르게 정의하는 것

특징

  • 클래스 내에서 발생 : 같은 클래스 안에서 발생
  • 매개변수만 다름 : 매개변수의 수, 타입, 순서가 달라야함
  • 반환값은 관계 없음 : 반환형은 오버로딩에 영향을 주지 않음
  • 컴파일 타임에 결정 : 어떤 메서드가 호출될지 컴파일 시점에 결정됨
public class Calculator{
   public int add(int a, int b){
      return a + b;
   }
   
   public double add(double a, double b){
      return a + b;
   }
   
   public int add(int a, int b, int c){
      return a + b + c;
   }
}
  • 모두 add 라는 이름이지만, 매개변수 타입/개수가 달라서 오버로딩 성립

2. 오버라이딩(Overriding)

오버라이딩은 부모 클래스에서 상속받은 메서드를 자식 클래스에서 재정의 하는 것

특징

  • 상속 관계에서 발생 : 반드시 상속관계(extends, implements) 여야 함
  • 메서드 시그니처 동일 : 메서드 이름, 매개변수, 반환형 모두 같아야 함
  • 접근 제어자는 같거나 더 넓어야 함
  • 런타임에 결정 : 어떤 메서드가 호출될지는 실행 시점에 결정됨
  • @Override 사용 권장 : 문법적 실수 방지 가능
public class Animal{
   public void sound(){
      System.out.println("동물이 소리를 낸다.");
   }
}

public class Dog extends Animal {
   @Override
   public void sound(){
      System.out.println("멍멍!");
   }
}
//실행
Animal myDog = new Dog();
myDog.sound();   // 멍멍!(오버라이딩된 메서드 호출됨)
  • Dog 클래스가 Animal의 sound() 메서드를 오버라이딩 했습니다
  • 실행 시점에서 실제 객체(Dog)의 메서드가 호출 됨 -> "다향성" 의 기반입니다.

3. 오버로딩 vs 오버라이딩

//오버로딩
public class Print {
   public void show(String s) {
      System.out.println(s);
   }
   
   public void show(int i){
      System.out.println(i);
   }
}

//오버라이딩
class Parent {
   public void message(){
      System.out.println("부모 메시지");
   }
}

class Child extends Parent {
   @Override
   public void message(){
      System.out.println("자식 메시지");
   }
}

🔍 왜 중요한가?

오버로딩

  • 다양한 형태로 같은 작업을 수행하고 싶을 때 유용

오버라이딩

  • 부모 클래스를 기반으로, 자식 클래스에서 기능을 맞춤화 하고 싶을 떄
profile
신입개발자의 공부 기록

0개의 댓글