[Java - 생활코딩] 오버로딩 vs 오버라이딩

Jean·2025년 7월 3일

[생활코딩]

목록 보기
6/8

✨ 오버로딩 (Overloading)

  • 과적하다
  • 같은 이름의 메서드를 매개변수만 다르게 여러 개 정의하는 것!
  • 같은 클래스 안에서 이름은 같고, 파라미터만 다르게 만든다
  • 내용은 다를 수 있음!
  • 서로 다른 메서드로 취급됨

🔹 예제

public class Printer {
    // 정수 출력
    void print(int num) {
        System.out.println("숫자: " + num);
    }

    // 문자열 출력
    void print(String text) {
        System.out.println("문자열: " + text);
    }

    // 두 개 출력
    void print(String text, int num) {
        System.out.println("문자열: " + text + ", 숫자: " + num);
    }
}

public class Main {
    public static void main(String[] args) {
        Printer p = new Printer();
        p.print(10);                  // 숫자: 10
        p.print("안녕");              // 문자열: 안녕
        p.print("나이", 20);          // 문자열: 나이, 숫자: 20
    }
}

🧹 오버라이딩 (Overriding)

  • 올라타다, 덮어쓰다
  • 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것!
  • 메서드 이름, 매개변수, 리턴 타입까지 모두 동일해야
  • 자식에서 재정의한 메서드가 호출됨 (덮어쓰기)
  • 실행 시점에서 어떤 클래스의 메서드를 쓸지 결정됨

🔹 예제

class Animal {
    void speak() {
        System.out.println("동물이 소리를 냅니다");
    }
}

class Dog extends Animal {
    @Override
    void speak() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.speak();  // 동물이 소리를 냅니다

        Dog d = new Dog();
        d.speak();  // 멍멍!

        Animal a2 = new Dog();  // 부모 타입으로 자식 객체 사용
        a2.speak();             // 멍멍! ← 자식의 메서드가 호출됨
    }
}

✅ 요약 비교

구분오버로딩오버라이딩
의미같은 이름, 다른 매개변수로 여러 개 정의부모 메서드를 자식이 덮어씀
사용 위치같은 클래스 내상속 관계 (자식 클래스에서)
메서드 이름같음같음
매개변수달라야 함동일해야 함
리턴 타입달라도 됨 (Java 5 이하 제한 있음)동일해야 함
실행 시점컴파일 타임런타임 (동적 바인딩)
profile
햇내기 개발자 지망생

0개의 댓글