어노테이션은 무엇일까요?

2022. 6. 16. 15:30CS/스터디

@ 어노테이션

 

사전적 의미로는 '주석'  자바에서만큼은 특별한 의미를 담은 주석

즉, 자바코드에 주석처럼 달아 프로그램에게 추가적인 정보를 제공해주는 메타데이터

자바나 스프링이 제공해주는 것도 있고 사용자가 직접 만들 수도 있다.

 

* 메타데이터 : 데이터의 대한 속성정보이다. 쉽게말해서 어떤 목적을 가지고 만들어진 데이터!

어노테이션에서는 다른 데이터를 설명해주는 데이터라고 이해하면 된다.

 

@ 어노테이션을 사용하는 이유

  • 컴파일러에게 코드작성 문법에러를 체크하도록 정보를 제공한다.
  • 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
  • 코드를 실행시 특정기능을 실행할 수 있도록 정보를 제공한다.

 

대표적인 자바에서 사용하는 어노테이션

 

  1. @Override 
    • 선언한 메서드가 오버라이드 되었다는 것을 나타냅니다.
    • 만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다.
  2. @Deprecated
    • 해당 메서드가 더 이상 사용되지 않음을 표시합니다.
    • 만약 사용할 경우 컴파일 경고를 발생 키십니다.
  3. @SuppressWarnings
    • 선언한 곳의 컴파일 경고를 무시하도록 합니다.
  4. @SafeVarargs 
  •  Java7 부터 지원하며, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다.
  •  @FunctionalInterface
  • Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션입니다.
  • 만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우 컴파일 오류를 발생 시킵니다.

- 람다는 @FunctionalInterface의 구현체이다.

 

람다식 : 메소드를 직접 정의하지 않고 하나의 '식(Expression)'으로 표현한 것이다. 일반적인 메소드 블럭은 리턴타입, 메소드명, 파라메터정의 3부분으로 이루어져 있다. 여기서 생략이 가능한 리턴타입, 메소드명을 제거하면 Lambda표현식이 된다.

 

public int sum (int a, int b) {
	return a+b;
}
(int a, int b) -> {
	return a+b;
}
(int a, int b) -> a+b;

(a, b) -> a + b;

 

 

인터페이스는 원래 메소드의 "선언"만 갖을 수 있다. 그런데 JDK8부터 인터페이스도 default 접근제한자와 함께 메소드 "구현"도 갖을 수 있게 되었다. 이 때, FuntionalInterface는 오직 하나의 메소드 선언을 갖는 인터페이스를 말한다.

 

@FunctionalInterface
interface MyFunction {

	// 오직하나의 메소드 선언
	void methodA(); 	
    
	// 메소드 구현 까지 포함	
	default void methodB(){ 		
 		System.out.println("Call Method B");	
	}
}

 

728x90