> For the complete documentation index, see [llms.txt](https://develop-footprint.gitbook.io/o/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://develop-footprint.gitbook.io/o/java/effective-java/6/item-40-override.md).

# item 40) @Override 어노테이션을 일관되게 사용하라

## @Override 어노테이션

* 상위 타입의 메서드를 재정의했음을 나타낸다.
* 메서드 선언에만 달 수 있으며, 일관되게 사용하면 여러 가지 버그들을 예방할 수 있다.

### 장점

* Java8에서 디폴트 메서드를 지원하므로, 인터페이스의 추상 메서드를 구현한 메서드에도 `@Override`를 붙여주면 **메서드의 시그니처가 올바른지 확인**할 수 있다.
* **재정의 하는지** 다중정의 하는지 확실하게 구분할 수 있다.
* **실수로 추가한 메서드를 확인**하기 위해 추상 클래스나 인터페이스에서는 상위 클래스나 상위 인터페이스의 메서드를 재정의하는 모든 메서드에 `@Override`를 붙여주자.

### @Override 어노테이션이 필요 없는 경우

* 구체 클래스에서 상위 클래스의 추상 메서드를 재정의할 때는 `@Override`를 달지 않아도 된다. 구체 클래스인데 아직 구현하지 않은 추상 메서드가 있다면 컴파일러가 이를 알려주기 때문이다.
* 하지만 `@Override`를 일괄적으로 달아주어도 된다.
