어노테이션을 일관되게 사용하면 끔찍한 human error로 인한 버그들을 방지 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Bigram { private final char first; private final char second; public Bigram(char first, char second){ this.first = first; this.second = second; } public boolean equals(Bigram b){ return b.first == first && b.second == second; } public int hashCode(){ return 31 * first + second; } public static void main(String[] args) { Set<Bigram> s = new HashSet<>(); for(int i=0; i<10; i++){ for(char ch = 'a'; ch<='z'; ch++){ s.add(new Bigram(ch, ch)); } } System.out.println(s.size()); } } | cs |
위와 같은 코드는 알파벳 두 개로 구생된 Bigram 객체 26개를 반복해서 집합에 넣는 작업을 수행한다.
Bigram 클래스의 프로그래머는 equals 메서드를 super class인 Object class로 부터 재정의 되지 못하고 Overloading 되었다는 것을 알 수 있다.
1 2 3 4 | @Override public boolean equals(Bigram b){ return b.first == first && b.second == second; } | cs |
만약 원래 의도대로 equals를 재정의 한다는 표시로 @Override 어노테이션을 위 코드와 같이 붙이면 어떻게 될까?
1 2 3 | Bigram.java:10: method does not override or implement a method from a supetype @Override ^ | cs |
위 처럼 컴파일 오류가 나타난다.
이처럼 Override를 의도했다면 해당 어노테이션을 붙여서 사전에 에러를 방지할 수 있다.
최신 IDE가 가지고 있는 코드 인스펙션(code inspection)을 통해 컴파일 전에도 에러를 알아차릴 수 있게 된다.
요약 : super class에 선언된 메서드를 재정의(Override)하는 모든 메서드에 Override 어노테이션을 붙이도록 하면 굉장히 많은 오류를 막을 수 있다.
반응형
'개발이야기 > Effective Java' 카테고리의 다른 글
[Effective Java]무점검 경고(unchecked warning)를 제거하라 (0) | 2017.04.16 |
---|---|
[Effective Java]새 코드에는 무인자 제네릭 자료형을 사용하지 마라 (0) | 2017.04.15 |
[Effective Java]자료형을 정의할 때 표식 인터페이스를 사용하라 (0) | 2017.03.10 |
[Effective Java]작명 패턴 대신 어노테이션을 사용하라 (0) | 2017.03.10 |
[Effective Java]int 상수 대신 enum을 사용하라 (0) | 2017.03.10 |
[Effective Java]예외를 무시하지 마라 (0) | 2017.03.04 |