자바로 코드를 짜다보면 @override를 많이 보게 된다. 볼 때마다 생각했던 것인데, overriding되 있는거 명시 안해줘도 다 아는데 왜 굳이 써놓았을까? 라는 의문이었다.
그러다, 이번에 bean에 대해 배우면서 @(어노테이션) 을 많이 보게 되었다. 이 포스팅에서는 어노테이션이 무엇인지에 대해 알아본다.
Annotation
= 컴파일러와 개발자에게 추가적인 정보를 제공하는 메타데이터
프로그램 코드의 일부가 아닌, 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법
<사용 이유>
- 컴파일러 체크
예를 들어, @Override를 붙이면 컴파일러가 해당 메서드가 상위 클래스나 인터페이스의 메서드를 올바르게 오버라이딩 하고 있는지 검사
오타나 시그니처가 틀릴 시. 컴파일 오류를 발생 - 가독성 및 문서화
코드의 의도를 명확하게 표현하여 역할을 바로 알 수 있음
→ 유지보수와 협업에 도움이 됨 - 부가 기능 제공
Spring, JPA 등 다양한 프레임워크에서는 어노테이션을 활용하여 런타임에 객체를 자동으로 생성하거나 특정 동작을 수행하도록 함
→ 코드를 간결하게 유지 & 복잡한 설정이나 동작을 자동화
어노테이션에는 굉장히 많은 종류가 있다. 그 중 잘 쓰이는 몇 가지를 알아보자.
@override
메서드가 슈퍼클래스(또는 인터페이스)의 메서드를 재정의(override)하고 있음을 컴파일러에 알려줌
@SpringBootApplication
Srping Boot를 자동으로 실행시켜주는 어노테이션
Bean을 정의하고 등록하는 3가지 어노테이션을 포함한다.
- @Configuration: 해당 클래스가 Spring 설정 파일임을 선언합니다.
- @EnableAutoConfiguration: 미리 정의된 설정들을 바탕으로 자동으로 Bean들을 등록해줍니다.
- @ComponentScan: 지정된 패키지(기본적으로 현재 클래스가 위치한 패키지 및 하위 패키지) 내의 컴포넌트를 검색하여 Bean으로 등록합니다.
🎀 Spring 설정 파일
= Bean을 정의 & 구성
- XML 설정 파일(구 방식)
스프링 컨테이너에게 어떤 빈들을 어떻게 생성하고 연결할지를 알려주는 설정 리소스
- Java Config(최신 방식)
@Configuration과 그 안의 @Bean 메서드들을 사용하면, 해당 메서드들이 반환하는 객체들이 bean으로 등록됨
@ComponentScan
직접 작성한 class를 bean으로 등록
→ value를 이용해 bean의 이름을 지정
@Bean
개발자가 제어 불가한 클래스(ex. 외부 라이브러리)를 bean으로 등록
→ name을 이용해 bean의 이름을 지정
@Controller
Spring MVC의 Controller로 사용되는, 클래스 선언을 단순화 시켜주는 어노테이션
@RestController
Spring에서 Controller 중 View로 응답하지 않는 Controller를 의미한다.
method의 반환 결과를 JSON 형태로 반환한다.
⇒ @Controller + @ResponseBody
🎨 @Controller | 💾 @RestController | |
역할 | View와 API를 모두 처리하는 컨트롤러 | API 전용 컨트롤러 (데이터만 반환하며, View는 처리 X) |
응답 형태 | 기본적으로 View(HTML 등)를 반환하며, API일 경우 별도로 @ResponseBody 사용 필요 | 메서드의 반환 값을 JSON이나 XML 등으로 직접 HTTP Response에 담아 반환 (자동 @ResponseBody 적용) |
사용 목적 | 웹 애플리케이션에서 UI 렌더링과 API를 함께 사용할 때 | RESTful API 개발 시, View가 필요 없는 데이터 응답에 사용 |
'🗄️Backend' 카테고리의 다른 글
[보안] jwt.secret 관리(.gitignore 설정, SpringBoot+intelliJ) (0) | 2025.03.25 |
---|---|
[SpringBoot] Soft Delete (0) | 2025.03.24 |
와일드 카드 import를 사용하면 안되는 이유 (1) | 2025.03.23 |
[DB/MySQL] 데이터타입(CHAR, VARCHAR,TEXT...) (0) | 2025.03.19 |
[백엔드] API 명세서 (0) | 2025.03.08 |