Java Bean과 Spring Bean

yscho·2023년 7월 31일
0
post-thumbnail

개념을 명확하게 이해하자...

Bean은 과거 웹 프로그래밍 수업에서 Spring을 사용하며 접했던 핵심 개념이지만

시험을 위한 급급한 암기 수준에서 그쳤고 그로부터 1년이 지나 Spring Boot공부를 시작한 지금
머릿속에서 Spring Bean의 개념이 명확하게 떠오르지 않았다.

따라서 오늘은 Bean이라는 개념을 명확하게 공부하고 정리 해 보려고한다.


Java Bean

Java Bean의 정의
" 빌더 형식의 개발도구에서 가시적으로 조작이 가능하고 또한 재사용이 가능한 Java로 작성된 소프트웨어 컴포넌트"

Spring Boot를 공부하는 나의 입장에서 개념을 추가하자면,
DTO나 VO와 같은 형태를 지닌 Java 클래스를 뜻한다.

즉, 필드는 private로 선언하여 직접적인 접근을 막고
Setter 와 Getter를 통해서 접근이 가능하며
생성자에 파라미터가 없어야 한다.

객체지향에서 지향해야할 POJO개념과 거의 동일하다고 생각하면 된다.


Spring Bean

위에서 살펴본 Java Bean의 개념이 '특정 형식을 지키는 클래스' 였다면
Spring Bean의 개념은 결이 살짝 다르다.

간단하게 설명해서 'Spring IoC 컨테이너에서 관리되는 객체'이다.

Java Bean처럼 클래스가 특정한 형식을 지켜야 할 필요가 없다.

Spring을 공부하는 사람이라면 IOC(제어의 역전) 개념을 알고 있다고 생각하고
Spring Bean을 IOC 컨테이너에 등록하는 방법을 알아보자.

1. 컴포넌트 스캔

Spring 프로젝트에서 흔히 사용하는 @Controller, @Service, @Repository, @Configuration과 같은 어노테이션을 사용하는 방식이다.
이들은 기본적으로 @Component를 포함하고 있기 때문에 자동으로 스캔하여 등록된다.

등록된 Bean을 사용(스프링 컨테이너에게 의존성을 주입 받음)하고 싶으면 @Autowired 어노테이션을 사용하면 된다.

참고로, 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다.
따라서 같은 스프링 빈이면 모두 같은 인스턴스다.

이 떄, Lombok을 사용한다면 빈을 사용하려는 객체에 @RequiredArgsConstructor을 선언하혀
@Autowired를 선언하지 않고 간단하게 사용 할 수 있다.

2. 자바 코드로 직접 스프링 빈 등록하기

스프링은 @Configuration 어노테이션이 명시된 클래스를 우선으로 읽는다.

따라서 SpringConfig.java 파일을 생성하여 @Configuration을 명시한 뒤, 클래스 내의 메서드에게 @Bean 어노테이션을 명시하여 등록한다. 이 때, 메서드 이름이 Bean의 이름이 된다.
@Configuration 어노테이션과 @Bean 어노테이션을 함께 사용하면 싱글톤임을 보장해 준다.

단, Controller는 컴포넌트 스캔 방식으로 등록해야 한다.

profile
개발자가 되고싶은

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

좋은 글 감사합니다.

답글 달기