본문 바로가기
쿤즈 Dev/Java

[Java] 메서드 오버라이딩 (Method Overriding)

by Koonz:) 2023. 9. 11.
728x90

지난 포스팅에서는 자바(Java)의 상속(Inheritance)에 대해서 알아보았다. 그리고 상속을 하게 되면 자주 사용하는 부분이 바로 메서드 오버라이딩이다.

이번 포스팅에서는 메서드 오버라이딩에 대해서 알아보자.


메서드 오버라이딩 Method Overriding

자바에서 메서드 오버라이딩은 하위 클래스(Subclass)에서 상위 클래스(Superclass)의 메서드를 재정의하는 개념을 나타낸다. 이것은 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 다형성(Polymorphism)을 구현하고 상속(Inheritance) 계층 구조를 활용하는 데 사용된다.


메서드 오버라이딩을 사용하면 다음과 같은 상황에서 유용하다.

다형성

상위 클래스의 참조 변수를 이용하여 하위 클래스의 객체를 다룰 수 있다. 이렇게하면 런타임 시 어떤 메서드가 호출될지가 결정된다. 이것은 유연하고 확장 가능한 코드를 작성하는 데 도움이 된다.

 

상위 클래스의 기능 확장

하위 클래스에서는 사우이 클래스의 메서드를 재정의하여 더 특별한 동작을 추가하거나 수정할 수 있다. 이것은 기존 코드를 수정하지 않고도 새로운 동작을 추가할 수 있도록 한다.


메서드 오버라이딩을 구현하려면 다음 규칙을 따라야 한다.

  • 메서드 이름, 매개변수 타입 및 반환 타입은 하위 클래스에서 재 정의된 메서드와 상위 클래스의 메서드가 정확하게 일치해야 한다.
  • 하위 클래스에서 재정의된 메서드는 상위 클래스에서 선언된 메서드의 접근 제어자를 더 강력하게 수정할 수 없다. 즉, 상위 클래스에서 public으로 선언돈 메서드는 하위 클래스에서 protected나 private으로 수정할 수 없다.
  • 메서드 내용을 재정의하려면 '@Override' 애노테이션을 사용하여 명시적으로 표시해야 한다. 이것은 컴파일러에게 해당 메서드가 실제로 상위 클래스의 메서드를 재정의하고 있음을 알려준다.

다음은 메서드 오버라이딩을 사용한 간단한 예제이다. 예제는 지난 상속에서 사용한 예제를 가져왔다.

// 동물 클래스
public class Animal {
    String name;

    pulic Animal(String name) {
        this.name = name;
    }

    public void speak() {
        System.out.println(name + " 소리를 낸다.");
    }
}

// 강아지 클래스
public class Dog extends Animal{

    public Dog(String name) {
        super(name); // 부모의 생성자 호출
    }

    // 부모 클래스의 메서드를 오버라이딩
    @Override
    public void speak() {
        super.speak();
    }
}

// 고양이 클래스
public class Cat extends Animal{

    public Cat(String name) {
        super(name); // 부모의 생성자 호출
    }

    // 부모 클래스의 메서드를 오버라이딩
    @Override
    public void speak() {
        System.out.println(name + " 야옹");
    }

    // 새로운 메서드
    public void jump() {
        System.out.println(name + " 점프");
    }
}

'Dog' 클래스와 'Cat' 클래스는 부모 클래스로 'Animal' 클래스를 상속받았다. 그리고 'Animal' 클래스의 speak() 메서드를 각각 오버라이딩받아서 사용하고 있다.

 

'Dog' 클래스에서는 상위의 speak 메서드를 그대로 사용하기 위해 'super' 키워드를 사용하여 상위 클래스의 'speak' 메서드를 그대로 호출하였고, 'Cat' 클래스는 함수를 재정의 하여 기능 자체를 바꿔버렸다.


이번 포스팅에서는 상속에 이어서 메서드 오버라이딩에 대해서 알아보았다. 클래스에서 가장 기본적인 기능들이고 이러한 기능들을 이용해서 프레임워크를 만들고 확장해 나가기 때문에 기본기능은 반드시 알아두어야 한다.

댓글