[Java] Annotation

Fortice·2021년 1월 8일
0

Java

목록 보기
1/7
post-thumbnail

어노테이션

자바코드에서 흔히 @Bean과 같이 @와 함께 코드에 표시하던 것이 있다. 이런 것들을 어노테이션이라 부르는데, 평소에 생각없이 그냥 쓰기만 했었는데 공부를 해야할 것 같아 찾아보았다.

정의

  • 기본적인 정의는 '주석' 이란 뜻이다.
  • 코드에 대해 특별한 의미, 기능을 나타낸다.
  • 프로그램에게 추가적인 정보를 제공하는 메타데이터이다.

개념

  • 컴파일러에게 정보를 주며, 컴파일 시 문법 에러를 체크하도록 한다.
  • 개발 환경이 어노테이션을 통해 코드를 자동 생성하도록 정보를 제공한다.
  • 런타임 시 특정 기능을 실행하도록 정보를 제공한다.

정의

정의 방법

@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는 대상])
public @interface [어노테이션명]{
	public 타입 elementName() [default]
    ...
}

예시 코드(Configuration)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
	@AliasFor(annotation = Component.class)
	String value() default "";
	boolean proxyBeanMethods() default true;
}

설명

  • @Target - 어떤 값에 어노테이션을 적용할 것인지 나타낸다.
    • TYPE - 클래스, 인터페이스, 열거 타입
    • ANNOTATION_TYPE - 어노테이션
    • 각 이름대로
      • FIELD, CONSTRUCTOR, METHOD, LOCAL_VARIABLE, PACKAGE
  • @Retention - 어노테이션 값들을 언제까지 유지할 것인지.
    • SOURCE - 소스상에서만 어노테이션 정보를 유지. 소스 분석시만 사용.
    • CLASS - 바이트 코드 파일까지 어노테이션 정보 유지. 리플렉션 이용 불가
    • RUNTIME - 바이트 코드 파일까지 정보 유지, 리플렉션을 이용해 런타임에 정보를 얻을 수 있음

      리플렉션

      객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법
      실행중인 자바프로그램 내부를 검사하고 내부의 속성을 수정할 수 있도록 한다.
      또한 자바에서 동적으로 객체를 생성할 수 있도록 한다.


      Spring의 BeanFactory는 어플리케이션이 실행한 후 객체가 호출 될 당시 객체의 인스턴스를 생성하게 되는데 그 때 필요한 기술이 Reflection이다

        java.lang.reflect
        Class c = Class.forName("java.lang.String");
        Class c = Data.class;
        Class c = Integer.TYPE; Wrapper에 기정의된 타입.
        Method m[] = c.getDeclaredMethods();
        Method[] m = c.getMethods();                     
        Field[] f = c.getFields();
        Constructor[] cs = c.getConstructors();
        Class[] inter = c.getInterfaces();
        Class superClass = c.getSuperclass();
profile
서버 공부합니다.

0개의 댓글