brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jul 16. 2018

열거형(Enum)과 주석(Annotation)

#36 Override 주석을 일관성 있게 사용하자

Effective Java - 열거형(Enum)과 주석(Annotation)


#36 Override 주석을 일관성 있게 사용하자


상속 관계에서 슈퍼 클래스의 메서드를 오버라이드 할 때 @Override 주석을 달자는 당연한 내용입니다.


아래 코드는 이름과 성을 가지는 Name 클래스입니다.

#01 Name class


이를 아래와 같이 Set<Name> 객체에 10번이나 중복된 값을 가지는 요소를 추가합니다.

Set은 중복된 요소를 가질 수 없는 컬렉션이기 때문에 size가 1이 될 거 같지만, 실제로는 10입니다.

#02 main method


그 이유는, Set에서는 Object.equals 메서드를 통해 요소들의 동일 여부를 판단합니다.

Name 클래스는 아래와 같이 equals 메서드를 재정의 했지만, Object.equals 메서드처럼 Object가 아닌 Name 타입의 매개변수를 받고 있습니다.

즉, 오버 라이딩이 아닌 오버 로딩을 하고 있습니다.

public boolean equals(Name n) {
    return n.firstName.equals(firstName) && n.lastName.equals(lastName);
}


이러한 문제를 컴파일 단계에서 찾기 위해서는 @Override 주석을 추가하면 됩니다.

@Override 주석을 추가하면, 아래와 같이 Object가 아닌 Name 타입의 매개변수로 인해 오버 라이딩을 하지 못한다고 미리 알려줍니다.

#03 @Override method


상속 관계에서 슈퍼 클래스의 메서드를 오버라이드 할 때는 @Override 주석을 달아서, 오버라이드를 제대로 했는지 미리 파악할 수 있습니다.

#04 @Override equals method




매거진의 이전글 열거형(Enum)과 주석(Annotation)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari