728x90
어노테이션이란? 소스코드에 메타코드(추가 정보)를 주는 것을 말한다.
- 어노테이션은 클래스나 메소드 위에 붙으며 @ 기호로 이름이 시작한다. ex) @Override
- 어노테이션은 자바가 기본으로 제공해주거나 사용자가 직접 만들 수 있다.(커스텀 어노테이션)
커스텀 어노테이션 이용 방법
1) 어노테이션을 정의한다.
2) 어노테이션을 클래스에서 사용한다.
3) 어노테이션을 이용하여 실행한다.
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
// JVM이 실행 시에 감지할 수 있는 어노테이션
@Retention(RetentionPolicy.RUNTIME)
public @interface Count100 {
}
public class MyHello {
@Count100
public void hello(){
System.out.println("hello");
}
}
import java.lang.reflect.Method;
public class MyHelloExam {
public static void main(String[] args) {
MyHello hello = new MyHello();
// 메소드에 대한 정보를 얻어낼 수 있음
// getClass() 메소드는 Object가 가지고 있는 메소드
// -> 모든 메소드는 Object를 상속받고 있으므로 사용 가능
// getClass() 메소드는 해당 인스턴스를 만들 때 사용한 클래스의 정보를 리턴함
// 클래스의 정보를 리턴 받아서 getDeclaredMethod() 메소드를 호출하면
// 클래스에 대한 정보를 얻고 그 정보로부터 hello라는 이름의 메소드에 대한 정보를 구할 수 있음
// 따라서 method는 hello에 대한 정보를 가지고 있다는 것임
try {
Method method = hello.getClass().getDeclaredMethod("hello");
// 메소드 객체 이용함 : isAnnotationPresent 메소드를 통해
// 특정 어노테이션이 메소드에 적용되어 있는지 알아낼 수 있음
// -> method가 Count100 어노테이션을 적용하고 있는가? 적용되어 있으면 true 반환
if(method.isAnnotationPresent(Count100.class)){
// Count100 어노테이션이 적용되어 있다면 해당 메소드를 100번 출력함
for(int i = 0; i < 100; i++){
hello.hello();
}
}else{
// Count100 어노테이션이 적용되어 있지 않다면 메소드를 1번만 호출함
hello.hello();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
method가 count100 어노테이션을 적용하고 있으므로 hello가 100번 출력된다.
근데 이렇게 직접 어노테이션을 만들어서 사용하는 일은 지금은 많이 없고
제공되는 어노테이션을 사용한다고 한다.
728x90
'강의 정리하기 > JAVA' 카테고리의 다른 글
Thread와 공유 객체 (0) | 2023.03.10 |
---|---|
Thread (0) | 2023.03.10 |
자바 IO(2) (1) | 2023.03.10 |
자바 IO(1) (0) | 2023.03.10 |
Date 클래스, Calendar 클래스, java.time 패키지 (0) | 2023.03.09 |