스프링 어노테이션

mangez_js·2024년 11월 28일

Study

목록 보기
17/47

어노테이션(Annotation)이란?

Spring Framework에서 빈(bean) 등록, 의존성 주, 요청 처리, 트랜잭션 관리 등 다양한 작업을 선언적으로 처리할 수 있도록 지원하는 어노테이션

용도

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
    ∘ 오버라이딩을 하기 위해서는 부모 클래스에 있는 메서드명과 매개변수를 동일하게 가져가야한다.
    ∘ 그런데 제대로 오버라이딩 했다고 생각했지만, 매개변수를 잘못 지정했을 수도 있다.
  • 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있또록 정보를 제공
  • 실행시(런타임시) 특정 기능을 실행하도록 정보를 제공한다.
  • 자식 클래스에 여러개의 메소드가 정의되어 있을 때 사용
    ∘ 해당 메소드가 부모 클래스에 있는 메소드를 오버라이딩 했다는 것을 명시적으로 선언

내장 Annotation

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

장점

  • 코드의 가독성 증대
    ∘ 관련 코드 곁에 메타데이터를 설정할 수 있으므로 코드의 가독성이 증대
  • 개발 효율성 증대
    ∘ 복잡한 XML 스키마를 파악하지 않아도 되며, 개발 시 개발 툴과 검파일러의 도움을 받을 수 있으므로 개발 효율성이 증대

단점

  • 어노테이션 처리 시 리플렉션을 통해 해당 클래스를 분석해야 하는 오버헤드가 있다.
  • 모듈이나 애플리케이션 전반적인 메타데이터를 설정할 수 없다.
    ∘ 어노테이션의 범위는 클래스나 패키지 레벨로 한정되기 때문에 여러 클래스에 걸친 공통적인 설정이나 모듈레벨 설정이 어렵다.
    ∘ 웹 어플리케이션 개발 시 서블릿 필터나, 인터셉터를 이용해서 문제해결이 가능함

Annotation 종류

어노테이션설명
@Component- 스프링이 관리할 객체(빈)를 선언
@ComponentScan- Spring Framework는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록한다. - @ComponentScan Annotation이 있는 클래스의 하위 Bean을 등록 될 클래스들을 스캔하여 Bean으로 등록
@Bean- 개발자가 제어가 불가능한 라이브러리와 같은 것들을 Bean으로 만들 때 사용
@SpringBootApplication- Application 클래스 class 상단에 선언 -@EnableAutoConfiguration, @ComponentScan, @Configuration 이 세가지 어노테이션을 제공하는 것과 같은 의미
@Controller- 컨트롤러(웹 요청 처리) 역할의 빈을 선언
@RestController- RESTful 웹 서비스 컨트롤러를 선언
@RequestBody- 요청 본문 데이터를 객체로 변환
@ResponseBody- 메서드 반환 값을 HTTP 응답 본문으로 변환
@(Get,Post,Put,Delete,Patch)Mapping- HTTP 메서드별 요청 매핑
@Autowired- 스프링 컨테이너에서 빈을 자동으로 주입
@Getter,@Setter- Get(), Set() 메소드를 컴파일 시 생성해준다.
@RequestParam- 쿼리 파라미터를 메서드 파라미터로 바인딩
@RequestHeader- 요청(request)에서 특징 HTTP 헤더 정보를 추출할 때 사용
@PathVariable- URL 경로의 변수를 메서드 파라미터로 바인딩
@ModelAttribute- 요청 파라미터를 객체에 바인딩
@RunWith- JUnit 프레임워크의 테스트를 할 수 있도록 설정 @Runwiht에 Runner클래스 설정시 JUnit의 내장된 runner 대신 설정한 SpringJUnit4ClassRunner를 실행

Lombok Annotation 종류

어노테이션설명
@@NoArgsConstructor파라미터가 없는 기본 생성자를 생성
@RequiredArgsConstructorfinal, @NonNull 인 필드값만 파라미터로 받는 생성자를 생성
@EqualsAndHashCodeequals() 메소드와 hashCode() 메소드를 오버라이드
@Data@toString, @getter/setter, @RequiredArgsConstructor 등 모두 사용한것과 같은 기능

JPA Annotation

어노테이션설명
@Entity데이터베이스의 테이블과 1대1 매칭
@Id테이블 컬럼의 기본키에 설정
@Column테이블 컬럼에 설정, @Entity로 지정시 생략가능
@GeneratedValue기본키에 지정된 auto increment 등의 속성을 지정
@EmbeddedId테이블 컬럼의 복합키에 설정
@Enumeratedenum과 관련되어 있으며, EnumType.ORDINAL, String의 속성
@Transient데이터베이스에서 실제 사용하지 않는 것을 지정, 임시값으로 활용

0개의 댓글