[JAVA] annotation & reflection

Coastby·2022년 10월 14일
0

LIKELION Back-End School

목록 보기
39/61

Annotation

Annotaiton(@)은 사전적 의미로 주석이라는 뜻이다. 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.

즉, 프로그램에게 추가적인 정보를 제공하는 메타데이터 (데이터를 위한 데이터)라고 할 수 있다.

Annotation의 용도

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다.
  • 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
  • 실행 시 (런타임시) 특정 기능을 실행하도록 정보를 제공한다.
  • @Test : 테스트 프로그램 (JUnit 등)에서는 미리 이 애너테이션에 대해 정의가 되어있다. 따라서 테스트 프로그램에는 이 애너테이션이 의미가 있지만, 다른 프로그램에게는 주석에 불과하다.
  • 표준 애너테이션 : 자바에서 기본으로 사용하는 애너테이션
    • 주로 컴파일러에게 유용한 정보를 제공한다.
    • @Override : 컴파일러에게 오버라이딩 메서드라는 것을 알려 메서드 이름에 오타 또는 형식에 오류가 있을 경우 에러메세지를 출력한다.
    • @Deprecated : 기존의 메서드를 보완한 새로운 메서드가 나와도 기존 메서드가 사용되고 있을 수 있어 함부로 없앨 수 없다. 굳이 사용할 수는 있지만 사용하지 않아야 한다.

Annotation의 사용 순서

  1. 어노테이션을 정의한다.
  2. 클래스에 어노테이션을 배치한다.
  3. 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시한다.

Reflection

  • Reflection이란 프로그램이 실행 중에 자신의 구조와 동작을 검사, 조사, 수정하는 것이다.
  • 프로그래머가 데이터를 보여주고, 다른 포맷의 데이터를 처리하고, 통신을 위해 serialization (직렬화)를 수행하고, bundling을 하기 위해 일반 소프트웨어 라이브러리를 만들도록 도와준다.
  • Java와 같은 객체 지향 프로그래밍 언어에서 컴파일 타임에 인터페이스, 필드, 메소드의 이름을 알지 못해도 해당 항목에 접근할 수 있다.
  • 새로운 객체의 인스턴스화 및 메소드 호출을 허용한다.
    • 멤버 접근 가능성 규칙을 무시할 수 있다.
    • Spring에서 BeanFactory라는 Container에서 객체가 호출되면 객체의 인스턴스를 생성하게 되는데 이 때 필요하게 된다. 즉, 프레임워크에서 유연성있는 동작을 위해 쓰인다.
  • Annotation 자체는 아무 동작을 가지지 못하지만, reflection을 이용하면,
    • annotation의 적용 여부와 엘리먼트 값을 읽고 처리할 수 있다.
    • annotation 지정만으로도 원하는 클래스를 주입할 수 있다.
  • 클래스에 적용된 어노테이션 정보를 얻을 때는java.lang.Class를 이용하면 된다. 하지만 필드, 생성자, 메소드에 적용된 어노테이션 정보를 얻으려면 java.lang.reflect패키지의 Field, Constructor, Method 타입의 배열을 얻어야 한다.
💡 IntelliJ의 자동완성 기능, 스프링의 어노테이션이 리플렉션을 이용한 기능이다.
profile
훈이야 화이팅

0개의 댓글