본문 바로가기
프로그래밍/JAVA

초보 자바 프로그래밍(47) - 메서드 오버라이딩(Overriding)

by 머니테크리더 2023. 5. 8.
반응형

자바 메서드 오버라이딩 대표 이미지
자바 메서드 오버라이딩 대표 이미지

🔖 INDEX

     

     

    메서드 오버라이딩이란?

    메서드 오버라이딩(Method Overriding)은 객체지향 프로그래밍의 핵심 원칙 중 하나인 다형성을 지원합니다. 다형성은 한 타입에 여러 개체를 대입할 수 있게 해 주어, 프로그램의 확장성과 유연성을 향상시키는 데 도움이 됩니다. 메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것을 의미합니다. 메서드 오버라이딩을 사용하면 부모 클래스를 상속받은 자식 클래스가 부모 클래스의 기능을 그대로 사용하거나 필요에 따라 변경할 수 있습니다.

     

    메서드 오버라이딩 조건

    메서드 오버라이딩을 수행하기 위해서는 몇 가지 조건을 만족해야 합니다. 다음은 메서드 오버라이딩의 조건들입니다:

    1. 메서드 이름: 부모 클래스의 메서드와 동일한 이름을 가져야 합니다.
    2. 매개변수: 부모 클래스의 메서드와 동일한 매개변수 타입과 개수를 가져야 합니다.
    3. 반환 타입: 부모 클래스의 메서드와 동일한 반환 타입을 가져야 합니다. 자바 5 이후부터는 공변 반환 타입(covariant return type)을 지원하며, 이 경우 부모 클래스의 반환 타입이 아닌, 그 하위 클래스의 반환 타입을 사용할 수 있습니다.
    4. 접근 제한자: 부모 클래스의 메서드와 동일하거나 더 넓은 범위로 설정되어야 합니다. 예를 들어, 부모 클래스의 메서드가 protected로 선언되어 있다면, 자식 클래스의 오버라이딩 메서드는 protected 또는 public으로 선언해야 합니다.
    5. 예외 처리: 자식 클래스에서 오버라이딩하는 메서드는 부모 클래스의 메서드와 호환되는 예외만 선언할 수 있습니다. 즉, 부모 클래스의 메서드가 던지는 예외보다 더 넓은 범위의 예외를 던질 수 없습니다.
    6. final 메서드: 부모 클래스의 메서드가 final 키워드로 선언되어 있다면, 오버라이딩할 수 없습니다. final 메서드는 더 이상 변경할 수 없는 메서드를 의미합니다.

    이러한 조건을 만족하면 메서드 오버라이딩이 가능하며, 자식 클래스에서 부모 클래스의 메서드를 필요에 따라 변경하여 사용할 수 있습니다. 이를 통해 상속과 다형성을 활용하여 유연한 코드를 작성할 수 있습니다.

     

     

    메서드 오버라이딩 예시

    예를 들어, 다양한 동물들이 움직이는 방식을 구현한다고 가정해 보겠습니다.

    // 부모 클래스
    class Animal {
        void move() {
            System.out.println("동물이 움직인다.");
        }
    }
    
    // 자식 클래스 1
    class Fish extends Animal {
        @Override
        void move() {
            System.out.println("물고기가 수영한다.");
        }
    }
    
    // 자식 클래스 2
    class Bird extends Animal {
        @Override
        void move() {
            System.out.println("새가 날아간다.");
        }
    }

    위 코드에서 Fish와 Bird 클래스는 Animal 클래스를 상속받아 메서드 오버라이딩을 통해 move() 메서드를 재정의했습니다. 각각의 자식 클래스에서 움직이는 방식에 맞게 move() 메서드를 구현하였습니다. 이렇게 하면 Animal 클래스를 상속받는 다양한 동물들이 공통적인 기능을 가질 수 있고, 동시에 각 동물의 특성에 맞게 기능을 변경할 수 있습니다.

     

    메서드 오버라이딩을 사용하는 경우 주의할 점은 @Override 어노테이션을 사용하는 것이 좋습니다. 이 어노테이션은 해당 메서드가 부모 클래스의 메서드를 오버라이딩한다는 것을 명시적으로 표시하며, 컴파일러가 오버라이딩 조건을 검사하도록 합니다. 이를 통해 오버라이딩을 제대로 구현했는지 확인하고, 실수를 줄일 수 있습니다.

     

    메서드 오버라이딩을 이용하면 다형성을 구현하여 코드의 확장성과 유연성을 높일 수 있습니다. 부모 클래스의 기능을 그대로 상속받거나 필요에 따라 변경하여 자식 클래스의 특성에 맞게 구현할 수 있기 때문입니다. 이를 통해 유지 보수가 쉽고, 가독성이 높은 코드를 작성할 수 있습니다.

     

     

    실제 업무에서의 사용

    실제 업무에서 메서드 오버라이딩은 다양한 상황에서 사용됩니다. 주로 프레임워크, 라이브러리, 공통 코드, 상속 및 다형성을 사용하는 경우에 오버라이딩이 적용됩니다. 몇 가지 예시를 들어보겠습니다.

    1. 프레임워크나 라이브러리 사용: 자바에서 자주 사용되는 웹 프레임워크인 Spring이나 Android 개발에 사용되는 Android SDK와 같은 프레임워크나 라이브러리에서는 기본적으로 제공되는 메서드를 개발자가 상황에 맞게 변경하여 사용해야 할 때 메서드 오버라이딩을 사용합니다. 이렇게 하면 프레임워크나 라이브러리에서 제공하는 기본 기능을 그대로 사용할 수 있으면서도, 필요한 부분만 커스터마이징할 수 있습니다.
    2. 공통 코드 작성: 업무에서 공통적인 기능을 제공하는 부모 클래스를 만들고, 이를 상속받아 다양한 자식 클래스를 작성할 때 메서드 오버라이딩을 사용할 수 있습니다. 이 경우, 자식 클래스는 부모 클래스의 공통 기능을 그대로 사용하거나 필요에 따라 변경하여 사용할 수 있어 유지 보수 및 확장성이 좋아집니다.
    3. 상속 및 다형성 활용: 업무에서 상속과 다형성을 활용할 때 메서드 오버라이딩이 자주 사용됩니다. 예를 들어, 여러 가지 동물들의 행동을 구현하는 경우, '동물'이라는 부모 클래스에 공통된 행동을 정의하고, 이를 상속받아 각 동물들의 특성에 맞게 행동을 변경할 수 있습니다. 이렇게 하면 코드 중복을 최소화하고 유지 보수를 용이하게 할 수 있습니다.

    결론적으로, 실제 업무에서 메서드 오버라이딩은 프레임워크나 라이브러리의 기능을 커스터마이징할 때, 공통 코드를 작성하고 상속 및 다형성을 활용하는 경우 등 다양한 상황에서 사용됩니다. 이를 통해 코드의 중복을 줄이고, 유지 보수 및 확장성을 높일 수 있습니다.

     

    2023.05.09 - [JAVA] - 초보 자바 프로그래밍(48) - 메서드 오버로딩(Overloading)

     

    초보 자바 프로그래밍(48) - 메서드 오버로딩(Overloading)

    🔖 INDEX 메서드 오버로딩이란? 메서드 오버로딩(Method Overloading)은 하나의 클래스 안에 같은 이름의 메서드를 여러 개 가지고 있을 때를 말합니다. 이를 통해 프로그래머는 같은 기능을 하는 메서

    moneylogging.tistory.com

     

     

    댓글