Spring Bean이란?
Spring의 Bean은 Spring IOC Container가 관리하는 객체들을 의미합니다.
따로 new 연산을 통해 객체를 생성하지 않아도 되고, Spring IOC Container에게 알려주기만 하면 객체를 만들어 사용해 줍니다.
Spring Bean을 사용하면 여러 클래스에서 따로 new연산을 하여 동일한 여러 객체를 만들 필요도 없어 메모리 활용에 효과적입니다. Spring IOC Container에서 가지고 있는 동일한 인스턴스만 사용하기 때문에 많은 이점을 얻을 수 있습니다.
그렇다면 이번 시간에는 Spring Bean에 등록하는 방법을 알아보도록 하겠습니다.
Spring Bean 등록 방법?
등록하는 방법은 크게 두가지가 있습니다.
- Component Scan
- 직접 자바로 등록하기
위 두가지 방법에 대하여 알아보도록 합시다.
Component Scan
Component Scan은 anotation인 @Component를 명시하여 Bean에 추가하는 방법입니다.
Class위에 anotationd을 추가해주면 자연스럽게 Bean에 객체로 추가가 됩니다.
우리가 자주 사용하는 Class에 대해 명시하는 anotation 대부분 @Component를 가지고 있습니다.
직접 확인해 보겠습니다.
1. @Controller
2. @Service
3. @Repository
위 anotation을 들어가 확인해보면 모두 @Component가 있음을 확인할 수 있습니다.
결론적으로 해당 anotation을 확인하면 바로 Spring의 Bean으로 포함되어 객체를 사용할 수 있게 됩니다.
Java Code로 등록하기
Java Code로 Bean을 등록 할 수 있습니다.
클래스를 생성하고 anotaiton @Configuration와 @Bean을 사용하여 직접 자바로 넣어줄 수 있습니다.
class위에 @Configuration를 붙여주고, 메소드에 @Bean을 붙여주어 구현하면 됩니다.
이때 메소드에서 Return되는 객체가 Spring Bean에 등록됩니다.
이 때 @Configuration anotation에는 @Component가 있습니다.
Spring Bean 사용 예시
대표적인 사용으로 DI(Dependency Injection)에서 활용됩니다.
처음에도 언급했듯이 Bean을 사용하면 동일한 역할을 수행하는 객체를 여러개 만들지 않아도 되는 장점이 있습니다.
예를들어 쇼핑몰 홈페이지를 생각해봅시다.
쇼핑몰 홈페이지에서는 회원가입을 할 수도 있고, 물건을 구매할 수도 있습니다.
구매를 하는 것도 member이고 회원가입도 member이기 때문에 둘 다 동일하게 memberRepository를 사용할 것입니다.
Bean에 있는 객체를 사용하지 않는다면, 각각의 객체에 new연산을 수행하여 객체를 만들어야하고, 동일한 인스턴스가 아니기에 서로 가지고 있는 정보도 다르고 등등의 문제점이 많이 생기게 됩니다..
아무튼.. @Autowired anotation을 사용하여! Bean에 등록된 객체를 사용할 수 있습니다.
- 생성자에서 사용하기
- 설정자에서 사용하기
- 필드에서 사용하기
설정자에서 사용하는 것은 과거에 많이 사용하였지만 최근에는 잘 사용되지 않는다고 합니다. run time에 변경될 일이 거의 없는데 개발자들이 접근을 할 수 있게 메소드를 열어놓기 때문입니다.
최근 자주 쓰는 방법은 생성자에서 사용하는 방법이라고 합니다! 따라서 생성자에서 사용하는 방법만 알아보도록 하겠습니다.
위 처럼 파라미터로 객체를 받는다면 Bean에서 파라미터에 해당하는 Class의 객체를 받아와 사용하게 됩니다.😊
포스팅을 마치며..
이번시간에는 스프링의 빈 등록 방법과 사용방법을 알아보았습니다!
스프링은 공부하면 할수록 너무 재밌는 것 같습니다!
혹시나 위 포스트에 대하여 피드백이나 궁금한점 있으면 댓글 남겨주시기 바랍니다! 감사합니다.
'Back-end > Spring' 카테고리의 다른 글
Request Body 받아오기 (0) | 2021.11.04 |
---|---|
Request Parameter 가져오기 (0) | 2021.11.04 |
Test Case 만들기 (0) | 2021.07.28 |
Static,MVC,API (0) | 2021.07.15 |
Project 생성, View, Build (0) | 2021.07.15 |