Annotation (@) 란?
사전적 의미로는 주석이라는 뜻이다. 그리고 Java에서는 Annotation은 특별한 의미와 기능을 수행하도록 만드는 기술이다. 그래서 한마디로 Annotation은 프로그램에게 추가적인 정보를 제공해주어 메타데이터라고 보면 되겠습니다.
⭐ Annotation 용도
컴파일러에게 에러에 대한 정보를 제공한다.
빌드 및 코드를 자동으로 생성할 수 있게 끔 정보를 제공한다.
실행시에 특정 기능 부분을 실행할 수 있도록 정보를 제공한다.
⭐ Annotation 사용 순서
1. 어노테이션을 먼저 정의해야한다.
2. 원하는 클래스에 어노테이션을 배치해둔다.
3. 코드가 실행되는 중에 Reflection을 이용해 추가 정보를 획득 후 기능을 실시한다.
⭐ Annotation 종류
1. @ComponentsScan
- @Component, @Service, @Repository, @Configuration, @Controller 등이
붙은 Bean을 찾아서 Context에 bean등록을 해준다.
※ 그런데 왜 Spring에서 @Component로 통일하여 작성하지 않는가?
그 이유는 메소드에서 발생할 수 있는 unchecked exception을
스프링의 DataAccessException으로 처리가 가능하기 때문이다.
2. @Component
- 자신이 직접 작성한 클래스를 Bean으로 등록을 위해 사용한다.
3. @Autowired
- 속성 및 생성자 등에 사용하고 Type에 따라 알아서 Bean을 주입해 준다.
4. @RestController
- 메서드의 반환 결과를 JSON 형태로 반환해주고
Controller 중 View로 응답하지 않는 Controller를 의미한다.
5. @Repository
- DataBase에 접근하고 method를 가지고있는 DAO 클래스에 쓰인다.
6. @Service
- 비즈니스 로직을 수행하는 클래스를 나타내는 용도이다.
7. @Configuration
- @Configuration 적용 후에 @Bean을 해당 클래스의 method에 적용하면
@Autowired로 Bean을 부를 수 있다.
8. @Value
- properties에서 값을 가져와 적용할 때 사용이 된다.
9. @SpringBootApplication
- @Configuration, @EnableAutoConfiguration, @ComponentScan을 3가지로 합친것이다.
10. @RequestMapping
- 요청 URL을 어떤 method가 처리할지 정한다.
11. GetMapping
- @RequestMapping과 같으며
@PostMapping, @PutMapping, @PatchMapping, @DeleteMapping 도 있다.
12. @CrossOrigin
- CORS 보안상의 문제로 브라우저에서 리소스를 현재 origin에서 다른 곳으로 AJAX 요청을 방지하는 것이다.
13. @RequestBody
- 요청이 온 데이터(JSON 및 XML 등)을 바로 클래스 또는 model로 매핑을 해준다.
14. @RequestHeader
- Request의 header값을 가져올 수 있어서 메소드의 파라미터에 사용이 많이 된다.
15. @RequestParam
- request의 parameter에서 가져오고 method의 파라미터에 사용이 된다.
16. @ResponseBody
- HttpMessageConverter를 이용해 JSON 또는 xml로 요청에 응답할 수 있게 해준다.
17. @Transactional
- 데이터베이스 로직이 전부 성공하거나 하나라도 실패한다면 다시 롤백할 수 있게 해준다.
18. @Cacheable
- 최초에 호출하게 된다면 캐시에 적재하고 다음부터는 동일한 호출이 있다면 캐시에서
결과를 가져와 return해주어 호출 횟수를 줄여준다.
⭐ Lombok Annotation
1. NoArgsConstructor
- 기본 생성자를 자동으로 만들어준다.
2. RequiredArgsConstructor
- final 및 @NonNull인 필드값만 파라미터로 받는 생성자를 추가한다.
3. @Getter
- 모든 필드의 Getter method를 자동으로 생성해준다.
4. @Setter
- 모든 필드의 Setter method를 자동으로 생성해준다.
5. @EqualsAndHashCode
- equals와 hashCode method를 오버라이딩 해준다.
6. @ToString
- 모든 필드의 toString method를 자동으로 생성해준다.
7. @Builder
- 어느 필드에 값을 채워야할지 명확하게 정해주어 생성 시점에 값을 넣어준다.
7. @Data- 앞서말한 @Getter @Setter @EqualsAndHashCode @AllArgsConstructor을 포함한다.하지만 모든 기능 허용으로 위험이 존재하여 실제로 사용을 많이 하지 않는다.
⭐ JPA Annotation
1. @Entity
- DB의 테이블과 매칭될 클래스임을 명시한다.
한마디로는 테이블과 링크될 클래스이다.
2. @Id
- 해당 table의 PK 필드를 나타내준다.
3. @Table
- Entity Class에 매핑되는 테이블 정보를 알려준다.
ex) @Table(name ="Board")
4. @GeneratedValue
- PK의 생성 규칙을 나타내준다.
5. @Column
- 테이블의 컬럼을 나타내고 선언하지 않아도 해당 클래스의 필드는 모두 컬럼이된다.
ex) @Column(name = "username")
주로 문자열의 사이즈를 늘리고 싶거나 타입을 바꿀때 사용이 된다.
'Back-End > Java' 카테고리의 다른 글
[Spring Boot] 썸머노트(Summernote) 사용법 (0) | 2021.07.13 |
---|---|
[Spring boot] 이미지, JS, CSS 적용하는 방법 (0) | 2021.07.13 |
JPA와 MyBatis의 차이를 알아보자 (0) | 2021.07.01 |
[Spring Boot] 스프링 부트 처음부터 시작하기 (0) | 2021.06.26 |
[Spring] 스프링 Security 게시판 및 파일첨부 예제 (1) | 2021.06.24 |