Bean이라는 말, 대체 뭘까?
Bean은 Spring이 대신 만들어주고 관리해주는 Java 객체(물건) 이다.
예를 들어보자.
엄마가 아침에 계란후라이를 만들어줬다고 가정해보자. 계란후라이는 내가 직접 만들 수도 있지만, 엄마가 미리 만들어 놓으면 내가 그냥 꺼내먹을 수 있을것이다.
Spring Bean도 똑같다.
Java에서는 우리가 객체를 new 키워드를 사용해 직접 만들어야 하는데, Spring은 객체를 미리 만들어서 냉장고처럼 보관해놓는다.
그럼 Bean은 왜 필요할까?
프로그래밍에서는 많은 객체들이 서로 협력을 통해 작동을한다.
예로 커피 앱을 만들었다고 가정해보면
- 커피를 내리는 객체
- 주문을 받는 객체
- 알림을 보내는 객체
등이 있을것이고 이 객체들을 하나하나 new로 만들고 연결하고 관리가 필요한데 이건 너무 복잡하고 비효율적일 것이다.
그래서 Spring이 "내가 다 해줄게~" 라고 해서 Bean을 대신 만들어주고, 서로 연결까지 해준다.
Bean은 어떻게 만들까?
방법1. @Component 스티커 붙이기
@Component
public class CoffeeMachine {
public String make() {
return "커피 나왔어요!";
}
}
이렇게 @Component 라는 표시를 붙이면, Spring이 알아서 이 클래스를 Bean으로 만들어서 보관해준다.
방법2. @Bean 사용하기(조금 더 수동적)
@Configuration
public class AppConfig {
@Bean
public CoffeeMachine coffeeMachine() {
return new CoffeeMachine();
}
}
이건 프로그래머가 직접 등록하고 싶은 경우이다.
이렇게 생성한 Bean은 어떻게 사용할까?
Bean은 Spring이 만들어서 저장해 놓은 객체라고 했다. 우리는 그 Bean을 그냥 요청만 하면 된다.
@Component
public class Cafe {
private final CoffeeMachine machine;
public Cafe(CoffeeMachine machine) {
this.machine = machine;
}
public void serve() {
System.out.println(machine.make());
}
}
Spring이 자동으로 CoffeeMachine을 Cafe에 딱 끼워 넣어준다. 이걸 의존성 주입(Dependency Injection)이라고 부른다.
Bean의 특징 3가지
특징 | 설명 |
자동으로 만들어진다 | @Component 나 @Bean 으로 표시만 하면 끝! |
하나만 만들어진다 | 기본적으로 Bean은 하나만 만들어진다 (Singleton) |
서로 연결이 가능하다 | 하나의 Bean이 다른 Bean을 사용할 수 있다 |
Bean이 없는 상황을 한번 살펴보면 편리함이 더 잘 느껴질것 같다.
public class App {
public static void main(String[] args) {
CoffeeMachine machine = new CoffeeMachine();
Cafe cafe = new Cafe(machine);
cafe.serve();
}
}
이렇게 직접 new로 다 만들어야 한다. 코드가 길어지고, 테스트하기도 어렵고, 관리도 힘들어진다.
'Back-End > Spring Boot + Kotlin' 카테고리의 다른 글
OAuth2 로그인 시 커스터마이징 포인트 (0) | 2025.06.18 |
---|---|
Spring Security는 뭘까? (2) | 2025.06.16 |
DB Connection Pool 고갈이 되면 무슨 일이 벌어질까? (0) | 2025.05.05 |
Kotlin val 은 왜 값이 변하는가?? (0) | 2025.04.28 |
Spring Boot 의존성 주입 (Dependency Injection) (2) | 2025.04.16 |