Ezcho

[java] 어노테이션 본문

Java

[java] 어노테이션

Ezcho 2022. 11. 9. 19:18

어노테이션

-Java5 부터 추가됨

-클래스나 메소드 위에 붙혀서 사용한다(@Override)

-@ 는 at 이라는 뜻이다.

-소스코드에 메타코드(추가 정보) 를 주는 역할을 한다.

 

자바가 기본으로 제공하는 어노테이션과 사용자가 직접 작성하는 어노테이션이 존재한다 이때 후자를 커스텀 어노테이션이라고 부른다.


커스텀어노테이션: 사용자가 직접 작성할 수 있는 어노테이션

커스텀 어노테이션의 사용법

  1. 어노테이션을 정의한다.
  2. 어노테이션을 클래스에서 사용한다. (타겟에 적용)
  3. 어노테이션을 이용하여 실행.

 

1. 어노테이션의 정의

Cout100 어노테이션의 정의

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;

    @Retention(RetentionPolicy.RUNTIME)
    public @interface Count100 {

    }

 

2. 어노테이션의 사용

 

hello 를 출력하는 Myhello 클래스를 작성, Count100어노테이션을 붙힌다.

    public class MyHello {
        @Count100
        public void hello(){
            System.out.println("hello");
        }
    }

 

3. 메인함수에서의 사용

    import java.lang.reflect.Method;

    public class MyHelloExam {
        public static void main(String[] args) {
            MyHello hello = new MyHello();

            try{
                Method method = hello.getClass().getDeclaredMethod("hello");
                //메서드 정보 알아보기, getClass(오브젝트메서드, 클래스의 정보 리턴)
				//예외처리 필요, try catch 로 묶어주기 이후 catch(Exception e)
                
            if(method.isAnnotationPresent(Count100.class)){
            	//메서드(count100이라는 annotation)를 적용을 하고있는가? 판단
                    for(int i = 0; i < 100; i++){
                        hello.hello();	//참이면 hello 를 100번 출력
                    }
                   
                }else{
                    hello.hello();	//거짓일 경우 hello를 한번 출력
                }
            }catch(Exception ex){
                ex.printStackTrace();
            }       
        }
    }

위 코드에서는 어노테이션을 적용하는 방법에 대해서만 보여주고 있다.

 


어노테이션의 역할

1. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공

2. 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공

3. 실행시(런타임시)특정 기능을 실행하도록 정보를 제공

 

내장 어노테이션의 종류

@Override : 해당 메서드가 오버라이드 됨

에러: 컴파일 에러

 

@Deprecated: 해당 메서드가 더 이상 사용되지 않음

에러: 컴파일 에러

 

@SuppressWarnings: 선언한 곳의 컴파일 경고를 무시

@SafeVarargs: 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시

 

@FunctionalInterface: 함수형 인터페이스를 지정하는 어노테이션입니다.

에러: 메서드가 존재하지 않을경우 or 메서드가 하나이상 존재할 경우 컴파일 에러

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

[Java] Thread  (0) 2022.11.25
[java] java IO - Byte단위 입출력  (0) 2022.11.16
[java] Date, Calendar클래스, Time 패키지  (0) 2022.11.09
[java] java.util패키지  (0) 2022.11.02
[java] Math Class  (0) 2022.10.12
Comments