[java] annotation 사용 Enjoy/JAVA2010. 6. 26. 16:26
JDK 1.5 부터 annotation 을 사용할 수 있도록 되었습니다. annotation 은 영어 사전을 찾아보면
주석 이라도 되어있군요.
자바에서 주석은
// 의 한줄 주석과, /* */ 의 여러줄 주석 그리고 /** */ 의 java document 를 만들 수 있는 주석이 있습니다.
그러니까 이러한 주석과 번역은 주석 이라고 되더라도 annotation 은 다른것 입니다.^^
위의 것들은 comment 라고 하나요??
하여튼 먼저 annotation 의 사용법을 보면
@Annotation 이렇게 사용합니다. 앞에 @ 마크가 붙습니다.
예전에 document 주석내에서 많이 보던것과 유사하죠.
/**
@author 저자명
*/
이런식의 주석이 있었습니다.
annotation 은 프로그램 코드의 관점에서 보면 그냥 설명 입니다. 즉 코드에 수행에 영향을 미치치 않습니다.
annotation 은 프로그램의 metadata 를 기술한다고 하는데 이는 프로그램에 대한 부연설명, 덧붙이는말
이 되겠습니다. annotation 은 compiler 나 외부 툴들에게 프로그램에 대한 부가적인 설명을 제공하는데 사용됩니다.
사용예를 보겠습니다.
프로그램을 작성하고 컴파일하면 deprecated 메소드라는 경고문구가 나오는 경우가 있습니다.
이는 사용하려고 하는 메소드가 앞으로 더 이상 지원되지 않으므로 사용하지 말라는 내용입니다.
물론 이런 경고가 나오는 시점에서는 사용할 수 는 있지만 언제 없어질지 모르는 경우죠.
반드시 대체할 수 있는 메소드나 방법을 찾아보아야 겠습니다.
그럼 이제 자신이 만든 메소드가 오래되어서 새로운 버전이 만들어지고 이것을 사용하는 사람들에게
구버전은 사용하지 말도록 deprecate 메세지를 컴파일시 보이고 싶을때 어떡할까요..
이때 @Deprecated annotation을 사용하면 됩니다
/**
@deprecated 더이상 지원되지 않는 메소드 입니다.
*/
@Deprecated
public void myOldMethod() {
}
이렇게 선언을 하면 컴파일시 위의 메소드를 사용할때 경고를 보여줍니다. 주석안의 @deprecated 와 차이점을
@Deprecated 처럼 대문자로 시작한다는 것입니다.
또 다른 하나를 보겠습니다.
클래스를 상속 받아서 상위클래스의 메소드중하나를 오버라이드 하는경우 입니다.
// 상위 클래스
public class Parent {
public void parentMethod() {
}
}
// 하위 클래스
public class Child extends Parent {
public void parentmethod() {
}
}
이처럼 상위의 parentMethod 를 오버라이드할 경우 parentmethod로 소문자로 적어서 오버라이드가 되는게 아니라
새로운 메소드가 되어버리는 실수를 할 수 가 있습니다.
이럴경우 @Override annotation 을 사용할 수 있습니다.
@Override
pubilc void paranemethod() {
}
이렇게 정의를 하면 컴파일시 parentmethod 가 상위 메소드를 오버라이드 하는것이라고 컴파일러에게 알리게 됩니다.
하지만 대소문자를 잘못적었기 때문에 오버라이드가 아니므로 컴파일러가 오류를 보여주게 됩니다.
이처럼 annotation 은 컴파일러 같은 외부툴들에게 프로그램의 부가적인 정보를 알려주기 위해서 사용됩니다.
또다를 사용처는 EJB3.0 에서는 빈의 특성을 컨테이너에게 알리는데 annotation을 사용합니다.
전에는 빈의 특성을 xml 파일로 작성을 해야만 했습니다.