[Java] 자바에서 오버로드와 오버라이드

Posted by nkjok
2025. 2. 2. 16:09 낙서장[1]/91. Java
반응형

자바에서 오버로드와 오버라이드

자바의 중요한 개념인 오버로드(Overload)와 오버라이드(Override)에 대해, 이 두 개념은 객체 지향 프로그래밍에서 자주 등장하는 개념으로, 메서드의 재사용성과 다형성을 구현하는 데 중요한 역할을 한다. 그럼, 오버로드와 오버라이드의 차이점과 예시를 통해 살펴보겠다

오버로드 (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;
    }
}

위의 예제에서 Calculator 클래스는 세 가지 add 메서드를 정의하고 있으며, 각 메서드는 매개변수의 타입이나 수가 다르다.

오버라이드 (Overriding)

오버라이드는 상위 클래스에 정의된 메서드를 하위 클래스에서 동일한 매개변수와 반환 타입으로 재정의하는 것을 의미한다.

특징:

  • 매개변수와 반환 타입이 동일하다.
  • 하위 클래스에서 상위 클래스의 메서드를 덮어쓴다.
  • @Override 애노테이션을 사용하여 컴파일러에게 재정의 의도를 명확히 할 수 있다.

예시:

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        super.sound(); // 상위 클래스의 sound 메서드를 호출한다.
        System.out.println("Dog barks");
    }
}

위의 예제에서 Dog 클래스는 Animal 클래스의 sound 메서드를 동일한 시그니처로 재정의하고 있으며, super 키워드를 사용하여 상위 클래스의 sound 메서드를 호출한 후 추가 동작을 정의한다.

오버로드와 오버라이드 사용 예시

오버로드 사용하는 경우:

  • 동일한 동작을 수행하지만 매개변수가 다른 여러 형태의 메서드를 정의할 때 사용한다.
  • 예를 들어, 다양한 데이터 타입을 처리하는 add 메서드를 정의할 때 사용한다.

오버라이드 사용하는 경우:

  • 상위 클래스의 기본 메서드 동작을 하위 클래스에서 변경하고 싶을 때 사용한다.
  • 예를 들어, 동물 소리를 내는 sound 메서드를 각 동물 클래스에서 구체화할 때 사용한다.

 

 

오버로드와 오버라이드는 자바에서 메서드의 재사용성과 다형성을 구현하는 중요한 개념이다. 오버로드는 매개변수를 다르게 하여 같은 이름의 메서드를 여러 개 정의하는 것이고, 오버라이드는 상위 클래스의 메서드를 하위 클래스에서 동일한 시그니처로 재정의하는 것이다. 이 두 개념을 잘 이해하고 사용하면 더 유연하고 유지보수하기 쉬운 코드를 작성할 수 있다고한다

반응형