-
아이템40. @Override 애너테이션을 일관되게 사용하라책/이펙티브자바 2021. 8. 31. 13:58
자바가 기본으로 제공하는 애너테이션 중 가장 중요한 것은 @Override 이다.
@Override 는 메서드 선언에만 달 수 있으며, 이 애너테이션이 달렸다는 것은 상위 타입의 메서드를 재정의 했음을 뜻한다.
// equals 메서드를 재정의 했다 ??? public boolean eqauls(Item40 item40) { return item40.x == x && item40.y == y; }
- 위 메서드는 equals() 를 재정의 한게 아니라 다중정의해버렸다.
- Objects.equals() 를 재정의 하기 위해선 매개변수 타입이 Object 여야 하는데 Item40 이다.
- 이러한 오류는 컴파일러가 찾아낼 수 있지만, 그러려면 Object.equals() 를 재정의한다는 의도를 명시해줘야한다.
// @Override 애너테이션을 달면 컴파일 에러 발생 // 매개변수가 Object 여야 한다고 알려줌 @Override public boolean eqauls(Item40 item40) { return item40.x == x && item40.y == y; } // 제대로 재정의한 equals() @Override public boolean equals(Object o) { if (!(o instanceof Item40)) { return false; } Item40 item40 = (Item40) o; return item40.x == x && item40.y == y }
- 상위 클래스의 메서드를 재정의하려는 모든 메서드에 @Override 애너테이션을 달자.
- IDE 에서도 무조건 다는것을 권장한다.
결론
- 재정의한 모든 메서드에 @Override 애너테이션을 의식적으로 달면 실수했을때 컴파일러가 바로 알려줄 것이다.
- 예외가 존재하긴 하나 단다고 해서 해로울 것도 없으니 무조건 달자.
'책 > 이펙티브자바' 카테고리의 다른 글
아이템28. 배열보다는 리스트를 사용하라 (0) 2021.09.01 아이템41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 (0) 2021.08.31 아이템39. 명명 패턴보다 애너테이션을 사용하라 (0) 2021.08.31 아이템50. 적시에 방어적 복사본을 만들라 (0) 2021.08.30 아이템49. 매개변수가 유효한지 검사하라 (0) 2021.08.30