View
반응형
@Override 애너테이션은 상위 타입의 메서드를 재정의했음을 나타낸다. 메서드 선언에만 달 수 있으며, 일관되게 사용하면 여러 가지 버그들을 예방할 수 있다.
@Override는 의도를 명확히 나타낸다.
@Override 애너테이션을 달아줌으로써 '재정의한다.'라는 의도를 명확히 나타낼 수 있다. 또한, 코드를 잘못 작성(Overriding이 아닌 Overloading)했을 경우 컴파일러가 잘못된 부분을 명확히 알려준다.
@Override를 달지 않아도 되는 단 하나의 예외
구체 클래스에서 상위 클래스의 추상 메서드를 재정의할 때는 @Override를 달지 않아도 된다. 구체 클래스인데 아직 구현하지 않은 추상 메서드가 있다면 컴파일러가 이를 알려주기 때문이다.
하지만 @Override를 일괄적으로 다는 게 좋아 보인다면 @Override를 달아줘도 상관없다.
@Override를 붙여주는게 좋은 이유
Java8에서 디폴트 메서드를 지원하기 시작하면서, 인터페이스의 추상 메서드를 구현한 메서드에도 @Override를 붙여주는 게 좋다. 이렇게 하면 메서드의 시그니처가 올바른지 재차 확신할 수 있기 때문이다.
또한, 실수로 추가한 메서드가 있는지 확인하기 위해 추상 클래스나 인터페이스에서는 상위 클래스나 상위 인터페이스의 메서드를 재정의하는 모든 메서드에 @Override를 붙여주는 게 좋다.
그러니 상위 클래스의 메서드를 재정의하려는 모든 메서드에 @Override 애너테이션을 달자.
반응형
'BackEnd > 이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] Item42- 익명 클래스보다는 람다를 사용하라 (0) | 2021.06.04 |
---|---|
[이펙티브 자바] Item41- 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 (0) | 2021.05.30 |
[이펙티브 자바] Item39- 명명 패턴보다 애너테이션을 사용하라 (0) | 2021.05.23 |
[이펙티브 자바] Item38- 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 (0) | 2021.05.19 |
[이펙티브 자바] Item37- ordinal 인덱싱 대신 EnumMap을 사용하라 (0) | 2021.05.16 |