아이템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 |