@Override 어노테이션의 의미와 사용 이유는 무엇일까?

Doa Choi·2021년 5월 16일
6

어노테이션이란?

어노테이션은 JDK5 부터 등장하였으며, 클래스나 메서드, 변수에 @을 사용하는 것을 말합니다.


어노테이션을 사용하는 이유

어노테이션은 사전적 의미로 주석을 뜻합니다. 주석과는 역할이 다르지만, 주석처럼 달아 특수한 의미 부여가 가능하며, 기능 주입이 가능합니다. 어노테이션을 사용하는 가장 큰 이유는 프로그램에게 추가 정보를 제공하는 메타 데이터를 위해서 사용합니다.


@Override 어노테이션의 기능

자식 클래스에 여러 개의 메서드가 정의가 되어 있을 경우

해당 메소드가 부모 클래스에 있는 메서드를 Override 했다는 것을 명시적으로 선언합니다. 가령 어노테이션을 사용하지 않으면 자식 클래스에 여러 개의 메서드가 있을 경우, 어떤 메서드가 Override 되었는지 쉽게 알기 어렵습니다. 이 때, 오버라이드 메서드를 사용하여 명시적으로 선언하게 되면 많은 메서드 중에서 어떠한 메서드가 부모 클래스로부터 오버라이딩이 되었는지 쉽게 파악할 수 있습니다. 실제로 본인이 작성한 코드는 쉽게 파악이 가능하겠지만, 다른 사람이 작성한 코드일 경우에는 알아보기가 어려울 수밖에 없습니다.


컴파일러에게 문법 체크를 하도록 알린다

오버라이딩을 하기 위해서는 부모 클래스의 있는 메서드명과 매개변수를 동일하게 가져가야 합니다. 그런데 제대로 오버라이딩을 했다고 생각했는데, 매개변수를 잘못 지정했을 수도 있습니다. 따라서 해당 어노테이션을 사용하면 "이 메서드는 Override 된 거야!"라고 컴파일러에게 알려 컴파일시 체크를 할 수 있습니다.

하기와 같이 코드를 작성해보았습니다.


AnnotationParent.java

package annotation;

public class AnnotationParent {

    public int annotationParentMethod(int num1, int num2) {
        return num1 + num2;
    }
}

이번에는 AnnotationParent 클래스를 확장하는 AnnotationChild 클래스를 만듭니다.


AnnotationChild.java

package annotation;

public class AnnotationChild extends AnnotationParent {
   // mark method as a superclass method
   // that has been overridden
    @Override
    public int annotationParentMethod(int num1, int num2) {
        System.out.print("num1 + num2 : ");
        return num1 + num2;
    }
}

위 코드는 문제 없이 컴파일이 됩니다.

그러나, 하기와 같이 매개변수를 부모 클래스의 메서드와 일치하지 않도록 하였을 경우 명시적으로 선언한 @Override 어노테이션에서 컴파일 오류가 발생하고 있는 것을 확인할 수 있습니다.



출력되는 오류 메세지는 하기와 같습니다.


java: method does not override or implement a method from a supertype

해당 오류 메세지의 내용은 어노테이션으로 Override 를 한다고 명시하였는데, 그러한 메서드가 부모 클래스에는 존재하지 않는다는 의미입니다. 이와 같이 해당 어노테이션은 제대로 오버라이드를 하였는지 확인할 수 있는 수단으로 사용될 수 있습니다.


Reference

The Java Tutorials JDK8, Override - https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html

자바의 신, 17장 - 어노테이션이라는 것도 알아야 한다.

0개의 댓글