Java

[Java-14] 어노테이션

zamezzz 2017. 5. 8. 23:02

 어노테이션 (Annotation)




오늘은 어노테이션에 대해 정리하겠습니다.


어노테이션 (Annotation)이란?


어노테이션의 사전적 의미는 '주석'입니다.

즉, 주석처럼 코드에 달아 해당 코드에 특수한 의미를 부여해주는 기능을 합니다.


가장 효율적으로 사용되는 부분은 유효성 검사 부분입니다.


코드의 문법 에러를 체크하여 유효성을 확인해줍니다.


● 사용 방법


사용 방법을 보겠습니다. 먼저 형태는 아래와 같습니다.


@Annotation_name


@ 문자를 사용하고, 뒤에 해당 어노테이션명을 작성해주는 것이죠.


Model 클래스에 어노테이션을 사용하여 유효성 검사를 하는 예시를 보시죠.



@NotNull

private String name;


@NotNull

@Min(0)

@Max(10)

private Integer age;


위에 사용된 @NotNull / @Min / @Max에 대해서 간략히 설명드리자면...


해당 변수의 유효성을 체크해주는 것인데요. 의미는 직관적이고 간단합니다.


@NotNull은 null값인지 체크를 하여, 반드시 name이 입력되도록 합니다.

@Min(0) / @Max(10)은  0 ~ 10사이의 값으로 'age'가 입력되도록 합니다.


이렇게 보시면 어노테이션은 매우 직관적으로 쉽게 사용할 수 있다고 느껴집니다



● 어노테이션 종류


이와같이 유용한 어노테이션의 종류에는 무엇이 있을까요


크게 2가지로 나누어 볼 수 있습니다.


- 빌트인 어노테이션

빌트인 어노테이션이란 자바 SDK에서 지원하는 어노테이션입니다.

따로 정의하지 않아도 SDK내에서 정의되어 있으므로 그냥 사용하면 됩니다.

대표적으로 @Override 어노테이션이 있습니다.

보시는 그대로 메소드가 오버라이드한 메소드임을 명시해줍니다.


- 커스텀 어노테이션

유저가 임의로 정의한 어노테이션을 뜻합니다.

사용 방법은 @interface를 이용하여 생성을 해줍니다.

예를 들어 아래와 같은 어노테이션을 생성하여 봅시다.

public @interface InputValue {

  String Value();

}


value 값을 멤버로 갖는 InputValue 어노테이션을 생성하였습니다.

위와 같은 방법으로 생성하면 어노테이션 생성이 완료된 것이죠.


이를 사용하는 방법 또한 위에 설명한 내용과 같으며, 아래와 같습니다.

@InputValue("value input")

public String testVar;


위와 같이 선언하면 String 변수 testVar는 "value input"이라는 값으로 초기화

되는 형태를 보실 수 있습니다.


● 빌트인 어노테이션을 열어보자


기존 어노테이션은 어떻게 생겼을까요? 빌트인 어노테이션을 한번 열어봅시다.


예를 들어 @Min 어노테이션을 열어보겠습니다. 정의된 형태는 다음과 같습니다.


주석부분을 제외하여도 많은양의 코드가 있죠?


여기서 익숙한 부분도 있네요 ㅎㅎ 위에서 커스텀 어노테이션을 만들 때 쓰였던


@interface가 보입니다. 빌트인 어노테이션도 같은 방식으로 단지 사전에 포함되어


생성된 어노테이션일뿐이네요. 그 정의 방식은 모두 같습니다.


그럼 주요 부분에 대해서 설명해보겠습니다.


@Target은 어떤 대상에 정의할지 선언하는 곳입니다. 메소드, 필드, 패키지 등등..

여기서 선언된 내용을 보니 @Min은 메소드, 필드, 파라미터 등에 사용가능하네요.


@Retention은 런타임때까지 살아 있으라는 의미입니다.


다음으로 Min 내부에 각 파라미터들이 보이실텐데요.


message / groups / payload 모두 default를 가지고 있습니다.


여기서 설정을 안해주면 매번 입력받아야 함으로 큰 이유가 없다면 여기서 설정해줍시다.




이상으로 어노테이션의 개념과 사용방법을 정리하였습니다.


우선 기존의 정의된 빌트인 어노테이션에 대해 익숙해지는 것이 중요할 것 같네요.


이후 필요에 따라 커스텀 어노테이션을 정의하고 직접 사용할 수 있을 정도로


스킬을 쌓는다면 더욱 편하고 직관적인 코드를 만들 수 있으리라 생각됩니다.


감사합니다.

반응형

'Java' 카테고리의 다른 글

[Java-16] Project language level 설정  (0) 2018.05.07
[Java-15] JVM 개념과 구조  (0) 2017.11.18
[Java-13] 제네릭  (0) 2017.03.18
[Java-12] 람다식 (Lambda)  (0) 2017.03.11
[Java-11] 스트림 (Stream)  (0) 2017.03.02