2008년 03월 24일
Java annotation 의 Java 5 와 Java 6 의 차이점...(@Override)
내가 공부를 할 겸 책을 보고 소스를 따라 코딩하고 있었는데
책에 약간 이상한 내용이 있었습니다.
소스를 먼저 보고 이야기를 하겠습니다.
위에는 interface 이고 밑에는 그놈을 구현한 class 입니다.public interface WriteArticleService {
void write(Article article);
}
public class WriteArticleServiceImpl implements WriteArticleService {
private ArticleDao articleDao;
public WriteArticleServiceImpl(ArticleDao articleDao) {
this.articleDao = articleDao;
}@Override
public void write(Article article) {
System.out.println("WriteArticleServiceImpl.write() 메서드 실행");}
}
밑에 클래스에서 @Override 라고 annotation 을 붙여 줬습니다.
그런데 분명히 정확하게 메소드 명이 일치함에도 불구하고 (툴에서 generate 한 메서드임에도 불구하고!)
빨간줄이 아주 이쁘게 쳐 지는 것입니다.
이게뭐야 ... 하고 한참 보다 보니까 저도 참 바보 같지....
상속을 받은게 아니라 interface 를 구현한 것이기 때문에 override 라고 할 수 없는 것입니다.
그런데 ~!!!
이게 자바 5 에서만 이렇다는 사실...
자바 6 인 MUSTANG 으로 가면서 interface 에 있는 메서드를 구현한 것도 @Override 로
가정하겠다는 의지가 보입니다...
정말로 제가 http://java.sun.com 으로 가서 죄다 뒤저 보았는데
java forum 에 저와 동일한 문제로 질문한 사람이 있었는데 아무도 대답은 없더군요
참고 : http://forum.java.sun.com/thread.jspa?threadID=5234627&messageID=9960523
그리고 계속 뒤지다 보니까 저와 동일한 문제를 제기한 사람이 있는데
이 사람이 찾아본 결과 분명히 Java 5 와 Java 6 의 @Override 에 대한 구현이 변했음에도 불구하고
sun 의 문서 중 어떠한 변화도 없었으며 이 두가지 버전의 API specification 이 정확하게 동일하다네요.
참고 : http://dertompson.com/index.php/2008/01/25/override-specification-changes-in-java-6/
이것들이 문서화를 제대로 안하고 일을 하고 있군요~!
전세계 자바 개발자들은 어떡하란 말이냐!
아무튼 eclipse 에서 자바 컴파일 버전 레벨을 6 으로 올려주니 빨간 줄은 사라지며 해결 되었습니다만....
자바 6 에서 이런식으로 annotation 을 죄다 붙여서 개발했는데
갑자기 자바 5 환경으로 바뀌어야 한다면 참으로 난감한 일이 아닐수 없네요...
# by | 2008/03/24 21:35 | 고민의 흔적 | 트랙백(1) | 덧글(2)








☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : Java 5와 Java 6 간의 @Override ..
Java annotation 의 Java 5 와 Java 6 의 차이점...(@Override) 이 문제 때문에 하마터면 엿 한 번 제대로 먹을 뻔 했습니다 -_-; 제가 작성하고 정상 동작하는 걸 확인한 코드를 커밋하고, 다른 팀원이 그걸 업데이트했는데, 똑같은 코드가 제 컴퓨터에서는 컴파일되고 팀원 쪽에서는 컴파일 에러가 나는 겁니다. 원인을 찾아보니 @Override 어노테이션이 달린 메서드에서 한결같이 @Override 잘못 붙였다고 에......more
책의 저자는 이클립스로 코드를 생성할 때 자동으로 @Override 가 붙었는데,
제가 실행한 환경은 jdk 1.5였습니다. @Override 를 지우니 정상적으로 실행이 되고,,
참 난감한 일입니다. 모든 소스코드의 어노테이션을 지우려니.. (물론 에디터의 찾아 바꾸기를 이용하면 몇 초면 해결되겠지만요.)
아니시면 어노테이션 수준을 조정하셔도 될듯 싶은데...(이클립스상에서 시도는 안해봤지만 될것 같네요)
편하자고 나온 기술이 발목을 잡으면 안되겠지요? ^^