Java annotation 의 Java 5 와 Java 6 의 차이점...(@Override)

내가 공부를 할 겸 책을 보고 소스를 따라 코딩하고 있었는데
책에 약간 이상한 내용이 있었습니다.
소스를 먼저 보고 이야기를 하겠습니다.

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() 메서드 실행");

     }
 
}

위에는 interface 이고 밑에는 그놈을 구현한 class 입니다.
밑에 클래스에서 @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)

트랙백 주소 : http://mostmax.egloos.com/tb/4244683
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from What You Kno.. at 2008/09/16 17:29

제목 : Java 5와 Java 6 간의 @Override ..
Java annotation 의 Java 5 와 Java 6 의 차이점...(@Override) 이 문제 때문에 하마터면 엿 한 번 제대로 먹을 뻔 했습니다 -_-; 제가 작성하고 정상 동작하는 걸 확인한 코드를 커밋하고, 다른 팀원이 그걸 업데이트했는데, 똑같은 코드가 제 컴퓨터에서는 컴파일되고 팀원 쪽에서는 컴파일 에러가 나는 겁니다. 원인을 찾아보니 @Override 어노테이션이 달린 메서드에서 한결같이 @Override 잘못 붙였다고 에......more

Commented by namo at 2008/04/08 12:29
얼마전에 스프링 2.5라는 책의 예제 코드들을 실행하다 보니 @Override 때문에 실행을 못한 적이 있습니다.
책의 저자는 이클립스로 코드를 생성할 때 자동으로 @Override 가 붙었는데,
제가 실행한 환경은 jdk 1.5였습니다. @Override 를 지우니 정상적으로 실행이 되고,,

참 난감한 일입니다. 모든 소스코드의 어노테이션을 지우려니.. (물론 에디터의 찾아 바꾸기를 이용하면 몇 초면 해결되겠지만요.)
Commented by 배고픈듯 at 2008/04/08 23:41
namo // 컴파일 레벨을 6.0 으로 해주시면 간단하게 해결 될듯 합니다. ^^
아니시면 어노테이션 수준을 조정하셔도 될듯 싶은데...(이클립스상에서 시도는 안해봤지만 될것 같네요)
편하자고 나온 기술이 발목을 잡으면 안되겠지요? ^^

:         :

:

비공개 덧글

.

◀ 이전 페이지          다음 페이지 ▶