본문 바로가기
백수/Spring

어노테이션 기초 정리

728x90
반응형

Annotation / 어노테이션
특별한 의미, 기능을 수행하도록 하는 기술입니다.
즉 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있습니다.
 - 메타데이터 : 데이터를 위한 데이터
 
 Annotation / 어노테이션 용도
 - 컴파일러에게 코드 작성 뭄법 에러를 체크하도록 정보를 제공
 - 개발 툴이 빌드, 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공
 - 실행시(런타임시) 특정 기능을 실행하도록 정보 제공
 
 사용 순서
 1. 어노테이션을 정의
 2. 클래스에 어노테이션 배치
 3. 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시
 
Reflection
프로그램이 실행 중에 자신의 구조와 동작을 검사, 조사, 수정하는 것입니다.
프로그래머가 데이터를 보여주고, 다른 포맷의 데이터를 처리하고 통신을 위한 serialization(직렬화)를 수행하고
bundling을 하기 위해 일반 소프트웨어 라이브러리를 만들도록 도와줍니다.
객체 지향 프로그래밍 언어에서 Reflection을 사용하는 경우 컴파일 타임에 인터페이스, 필드, 메서드의 이름을 알지 

못해도실행 중에 클래스, 인터페이스, 필드, 메소드에 접근할 수 있습니다.
새로운 객체의 인스턴스화, 메소드 호출을 허용합니다.
객체 지향 프로그래밍 언어에서는 Reflection을 사용하여 멤버 접근 가능성 규칙 무시가 가능합니다.

Annotation / 어노테이션 종류
1. @ComponentScan
@ComponentScan와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을
찾아서 Context에 Bean을 등록해주는 어노테이션입니다.
Spring에서 @Component로 다 쓰지 않고 @Service, @Repository, @Controller 등으로 구분하여 사용하는 이유로
가독성에서도 해당 어노테이션을 갖는 클래스가 무엇을 하는지 단번에 알 수 있습니다.
자동으로 등록되는 Bean의 이름은 클래스의 첫문자가 소문자로 바뀐 이름이 자동 적용 됩니다.

2. @Component
개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation(어노테이션)입니다.
추가 정보가 없는경우 Class의 이름을 camelCase로 변경한 것이 Bean id로 사용됩니다.
다만 @Bean과 다르게 @Component는 name이 아닌 value를 사용해 Bean의 이름을 지정합니다.

3. @Bean
개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들려 할 때 사용 됩니다.

4. @Autowired
속성,setter method, constructor(생성자)에서 사용하며 Type에 따라 알아서 Bean을 주입해주며 

무조건적인 객체에 대한 의존성을 주입시킵니다.
Autowired 사용하는경우 spring이 자동적으로 값을 할당합니다.
Controller 클래스에 DAO, Service에 관한 객체들을 주입시킬 때 많이 사용됩니다.

@Inject
@Autowired 어노테이션과 비슷한 역할을 합니다.

@Qualifier("testid")
@Autowired와 같이 사용되며 동일한 타입의 Bean 객체가 있을 때 해당 아이디를 적어 원하는 Bean이 주입될 수 있도록
하는 Annotation입니다.
동일한 타입의 Bean이 두 개 이상이 존재하는 경우에 Spring이 어떤 Bean을 주입해야 할지 알 수 없어서 

Spring Container를 초기화하는 과정에서 예외를 발생시킵니다.
이 경우 @Qualifier을 @Autowired와 합계 사용하여 정확히 어떤 Bean을 사용할지 지정하여 특정 의존객체를 주입할 수 있도록 합니다.
xml 설정에서 Bean의 한정자 값을 설정하고 @Autowired 어노테이션이 적용된 주입 대상에 @Qualifier 어노테이션을 설정합니다.

@RequiredArgsConstructor
초기화 되지않는 final, @NonNull을 사용하는 필드에 대해 생성자를 생성해 줍니다.
주로 의존성 주입 편의성을 위해 사용됩니다.

@Controller
Spring의 Controller를 의미하여 Spring MVC에서 Controller 클래스입니다.
Model객체를 만들어 데이터를 답고 View를 반환합니다.

@RestController
@Controller에 @ResponseBody가 결합된 어노테이션입니다.
컨트롤러 클래스 하위 메서드에 @ResponseBody을 선언하지 않아도 문자열,JSON 등을 전송할 수 있습니다.

@Controller vs @RestController
@Controller
 - API, View를 동시에 사용하는 경우에 사용됩니다.
 - API 서비스로 사용하는 경우 @ResponseBody를 사용하여 객체를 반환합니다.
 - View return이 주목적 입니다.
@RestController
 - View가 필요 없는 API만 지원하는 서비스에서 사용합니다.
 - Spring 4.0.1이상부터 제공됩니다.
 - @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정합니다.
 
@Service
Service Class에서 사용됩니다.
비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도입니다.

@Repository
DAO Class에서 사용되며 DataBase에 접근 하는 method를 가지고 있는 Class에서 사용됩니다.

@EnableAutoConfiguration
Spring Application Context를 만들 때 자동으로 설정하는 기능을 켠다.
classpath의 내용에 기반해서 자동으로 생성해줍니다.
tomcat-embed-core.jar 파일이 존재하는경우 톰캣 서버가 setting 됩니다.

@Configuration
해당 어노테이션을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면 @Autowired로 

 Bean을 부를 수 있습니다.
1개 이상의 bean을 등록할 때 설정 됩니다.

@Required
setter method에 적용해주면 Bean 생성 시 필수 프로퍼티임을 알립니다.
Requird Annotation을 사용하여 optional하지 않는 꼭 필요한 속성들을 정의합니다.
영향받는 bean property를 구성할 시에는 XML 설정 파일에 반드시 property를 채워야 합니다.

@RequestMapping
요청 URL을 어떤 method가 처리할지 mapping 해주는 어노테이션 입니다.
요청받는 형식으로 GET, POST, PATCH, PUT, DELETE 등을 정의합니다.
요청 형식이 정의되지 않으면 자동으로 GET로 설정됩니다.

@ModelAttribute
클라이언트가 전송하는 http parameter, Body 내용을 Setter함수를 통해 1:1로 객체에 데이터를 연경 합니다.
ResponseBody와 다르게 HTTP Body내용은 multipart/form-data 형태를 요구합니다.
@ResponseBody가 json을 받는 것과 달리 @ModelAttribute의 경우 json을 받아 처리가 불가합니다.

@RequestParam
request의 parameter에서 가져오는 것 입니다.
method의 파라미터에 사용되며 ?moviename=thepurge 와 같은 쿼리 파라미터를 파싱 해줍니다.

@PathVariable
매핑 URL {}로 들어가는 패스 변수를 받습니다.

@Data
@Getter @Setter @EqualsAndHashCode @AllArgsConstructor @toString @equals를 포함한
Lombok에서 제공하는 필드와 관련된 모든 코드를 생성합니다.

@ExceptionHandler(ExceptionClassName.class)
해당 클래스의 예외를 캐치하여 처리 합니다.

@ControllerAdvice
Class 위에 ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지는 각 메서드 상단에 @ExceptionHandler(예외클래스)
를 붙여서 기술합니다.

@ResponseBody
메소드에서 리턴되는 값이 View로 출력되지 않고 HTTP Response Body에 직접 쓰이게 됩니다.
return 시에 json,xml과 같은 데이터를 return 합니다.

728x90
반응형

'백수 > Spring' 카테고리의 다른 글

ORM(Object Relation Mapping)  (0) 2023.07.14
영속성(Persistence)  (0) 2023.06.20
Spring 프레임워크  (0) 2023.05.31
Spring 기초  (0) 2023.05.23
스프링이란  (0) 2022.10.06