티스토리 뷰

자바가 기본으로 제공하는 애너테이션 중 가장 중요한 것은 @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 애너테이션을 의식적으로 달면 실수했을때 컴파일러가 바로 알려줄 것이다.
  • 예외가 존재하긴 하나 단다고 해서 해로울 것도 없으니 무조건 달자.