- @ Annotation 어노테이션2024년 12월 24일
- imaginaring
- 작성자
- 2024.12.24.:50
목적
- 메타데이터 제공 - 부가정보를 제공하여 런타임 또는 컴파일러가 처리할 수 있도록
- @Override, @Deprecated
- 컴파일러 지시 - 컴파일러가 특정 경고롤 무시하거나, 잘못된 사용을 체크하도록
- @SuppressWarnings
- 런타임 동작 변경
- 프레임워크나 라이브러리가 런타임에 동적으로 동작 변경가능
- @Controller, JPA에서 @Entity
- 프레임워크나 라이브러리가 런타임에 동적으로 동작 변경가능
- 가독성 향상, 너무 많으면 반대로 복잡해지고 가독성이 떨어질수도...
- 메타데이터 의존 - 런타임 동작 이해하려면 어노테이션과 이를 처리하는 프레임 워크 동작 원리를 알아야함
자바 내장 어노테이션
- @Override
- @Deprecated - 해당 코드가 더 이상 사용되지 않음 (사용시 컴파일러 경고 발생)
- @SuppresssWarnings - 컴파일러가 경고를 무시하도록 지시
커스텀 어노테이션 - 직접 어노테이션 정의하는 예시
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // @Target: 어노테이션을 적용할 수 있는 위치 지정 // ElementType.METHOD 메소드에만 적용가능 @Target(ElementType.METHOD) // @Retention: 어노테이션의 유지 정책 지정 // RUNTIME : 런타임까지 유지 (리플렉션으로 접근 가능) // CLASS : 컴파일된 클래스 파일에 유지되지만 런타임에 접근 불가 // SOURCE : 소스 코드에만 유지, 컴파일 후 제거 @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value() default "Default Value"; }
// 사용 public class MyClass { @MyAnnotation(value = "Hello, Annotation!") public void myMethod() { System.out.println("Method is running."); } }
리플렉션으로 어노테이션 읽기
import java.lang.reflect.Method; public class AnnotationProcessor { public static void main(String[] args) throws Exception { Method method = MyClass.class.getMethod("myMethod"); if (method.isAnnotationPresent(MyAnnotation.class)) { MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); System.out.println("Value: " + annotation.value()); } } }
Spring 주요 어노테이션
- @Component: 일반적인 Bean 등록.
- @Service: 비즈니스 로직을 수행하는 Bean 등록.
- @Repository: 데이터 접근 계층(DAO) 등록.
- @Controller: MVC의 컨트롤러로 등록.
- @Autowired: 의존성 주입(DI)을 자동으로 수행.
- @RestController : REST API 컨트롤러 정의, JSON / XML 형식 데이터 반환
@RestController public class MyRestController { @GetMapping("/api/data") public String getData() { return "Hello, World!"; } }
- 요청처리 및 매핑
- @RequestMapping : HTTP 요청을 특정 메소드 또는 클래스와 매핑
- @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
// 1 @RestController @RequestMapping("/api") public class ApiController { @RequestMapping("/data") public String getData() { return "Mapped using @RequestMapping"; } } // 2 @RestController public class ApiController { @GetMapping("/data") public String getData() { return "GET Data"; } @PostMapping("/data") public String createData() { return "POST Data"; } }
- 스프링부트
- @SpringBootApplication: 스프링부트 엔트리포인트 정의
- @Configuration : 설정 클래스 (Bean 등록 등)
- @EnableAutoConfiguration : 스프링 부트 자동 설정 활성화
- @ComponentScan : 지정된 패키지와 하위 패키지를 스캔하여 Bean으로 등록
- @PropertySource : 외부 프로퍼티 파일 로드
- @Value : 프로퍼티 파일 값을 주입받음
- @SpringBootApplication: 스프링부트 엔트리포인트 정의
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } } @Configuration @PropertySource("classpath:application.properties") public class AppConfig { } @Service public class MyService { public String getService() { return "Service Logic"; } } @Controller public class MyController { @Autowired private MyService myService; @GetMapping("/hello") public String hello() { return myService.getService(); } } @Component public class AppProperties { @Value("${app.name}") private String appName; public String getAppName() { return appName; } }
데이터 및 트랜잭션 관련 어노테이션
- @Entity : JPA에서 데이터베이스 테이블과 매핑되는 클래스
@Entity public class MyEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; }
- @Transactional : 메소드 또는 클래스에 트랜잭션 관리 기능 적용
@Service public class MyService { @Transactional public void performTransaction() { // 트랜잭션 관리 } }
테스트 관련 어노테이션
- @SpringBootTest : 통합 테스트를 위한 어노테이션, 스프링 컨텍스트를 로드하여 테스트 실행
@SpringBootTest public class ApplicationTests { @Test void contextLoads() { } }
- @MockBean : 테스트 환경에서 Bean을 Mock 객체로 대체
@SpringBootTest public class ServiceTest { @MockBean private MyRepository repository; }
어노테이션 설명 @SpringBootApplication 스프링 부트 애플리케이션의 진입점 @Component 일반적인 Bean 등록 @Service 비즈니스 로직을 수행하는 클래스 @Repository 데이터베이스 작업을 처리하는 DAO 클래스 @Controller MVC 컨트롤러 @RestController REST API 컨트롤러 @Configuration 설정 클래스 @Entity JPA 엔터티 클래스 @Transactional 트랜잭션 관리 @SpringBootTest 통합 테스트 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)