2024. 6. 21. 23:14ㆍ정보처리,전산/springboot
Java에서는 Annotations 을 사용하여 클래스, 메서드, 필드, 매개변수 등에 부착되어 다양한 정보를 제공하며 메타데이터로 사용된다.
내장 애노테이션 (Built-in Annotations)
@Override
메서드가 슈퍼클래스의 메서드를 오버라이드하고 있음을 나타내고 컴파일러가 오버라이드 여부를 검증하여 잘못된 오버라이드를 방지한다.
@Override
public String toString() {
return "Custom toString implementation";
}
@Deprecated
해당 요소가 더 이상 사용되지 않으며, 앞으로 사라질 수 있으며 코드에 경고 메시지를 출력한다.
@Deprecated
public void oldMethod() {
// Old implementation
}
@SuppressWarnings
컴파일러 경고를 무시하도록 지시한다.
@SuppressWarnings("unchecked")
public void someMethod() {
List rawList = new ArrayList(); // unchecked warning suppressed
}
@SafeVarargs
제네릭 가변인자 메서드에서 발생할 수 있는 잠재적 타입 안전성 문제를 억제하며 final 또는 static 메서드에서만 사용된다.
@SafeVarargs
public static <T> void printList(T... elements) {
for (T element : elements) {
System.out.println(element);
}
}
@FunctionalInterface
해당 인터페이스가 함수형 인터페이스임을 나타낸다. 함수형 인터페이스는 하나의 추상 메서드를 가지는 인터페이스이다.
@FunctionalInterface
public interface MyFunctionalInterface {
void execute();
}
메타 애노테이션 (Meta-Annotations)
메타 애노테이션은 다른 애노테이션을 정의하는 데 사용된다:
@Retention
- 애노테이션이 유지되는 기간을 지정한다.
- RetentionPolicy 타입의 값을 가진다: SOURCE, CLASS, RUNTIME.
@FunctionalInterface
public interface MyFunctionalInterface {
void execute();
}
@Target
- 애노테이션이 적용될 요소의 타입을 지정한다.
- ElementType 타입의 값을 가진다: TYPE, FIELD, METHOD, PARAMETER, 등.
@Target(ElementType.METHOD)
public @interface MyAnnotation {
// ...
}
@Documented
- 애노테이션이 Javadoc에 포함되도록 지정한다.
@Documented
public @interface MyAnnotation {
// ...
}
@Inherited
- 애노테이션이 서브클래스에 상속되도록 지정한다.
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
// ...
}
사용빈도 높은 Annotations
1. Spring 애노테이션
- @Component, @Service, @Repository: 스프링의 빈으로 등록.
- @Autowired: 의존성 주입.
- @Controller, @RestController: 스프링 MVC 컨트롤러.
- @RequestMapping, @GetMapping, @PostMapping: 요청 매핑.
2. JUnit 애노테이션
- @Test: 테스트 메서드로 지정.
- @Before, @After: 테스트 전후에 실행될 메서드.
- @BeforeClass, @AfterClass: 클래스 단위의 테스트 전후에 실행될 메서드.
'정보처리,전산 > springboot' 카테고리의 다른 글
@RequestParam (0) | 2024.09.15 |
---|---|
@RequestMapping (0) | 2024.09.15 |
Gradle 의존성 추가 키워드 (0) | 2024.06.27 |
jetbrains IntelliJ HotKey (0) | 2024.06.21 |
GRADLE , MAVEN (0) | 2024.06.21 |