프로그래밍 공부/Spring

[Spring] Java Bean vs Spring Bean

스프링으로 개발을 진행하다보면, Bean이라는 개념을 정말 자주 만나게 된다. 무슨 느낌인지 대충은 알겠는데... 그래서 대체 Bean은 어떻게 만들어지는 것이고, 무슨 개념일까? 라고 물으면 막상 대답하기는 쉽지 않다. 그래서 일단 Bean이라는 것이 무엇인지부터 알아보면서 Bean에 대해서 하나씩 정리해보고자 한다.

 

Java Bean

Bean은 스프링에서만 나오는 개념 아니야? 라고 물어볼 수 있으나, 자바에도 빈이라는 개념은 존재한다. 위키피디아 링크

Java Bean은 데이터 표현을 목적으로 하는 특정 형태의 클래스라고 이해하면 된다. DTO나 VO와도 유사한 점이 있어 보인다. 개발 툴이나 응용프로그램에서 사용하고자 하는 개념으로 출발했다고 하나, 현재는 그 의미로는 거의 사용하지 않는 것으로 보인다. (만약 아니라면... 댓글로 달아주세요!) 

 

자바 빈이 지켜야 할 관례

  • 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원 시키기 위해)
  • 클래스는 기본 생성자를 가지고 있어야 한다.
  • 클래스의 속성들은 getset 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다.
  • 클래스는 필요한 이벤트 처리 메서드들을 포함하고 있어야 한다.

어떤 입장에서는 POJO(Plain Old Java Object)와 유사한 개념으로 보는 입장도 있는 것 같다. 

 

이렇게 말로 설명하면 이해가 잘 안되니, 코드로 설명하자면 다음과 같다. 

 

public class SampleJavaBean {

	// 필드는 private로 선언
    private String bean;
    private int beanValue;

	// 전달 인자가 없는(no-argument) 생성자
    public SampleJavaBean() {
    
    }
		
	// getter
    public String getBean() {
        return beanName;
    }
    
	// setter
    public void setBean(String bean) {
        this.bean = bean;
    }

    public int getBeanValue() {
        return beanValue;
    }

    public void setBeanValue(int beanValue) {
        this.beanValue = beanValue;
    }
}

 

 

Spring Bean 

스프링에서의 Bean은 스프링 IoC 컨테이너가 관리하는 Java 객체를 말한다.

스프링에 의해 생성되고, 라이프 사이클을 수행하고, 의존성 주입이 일어나는 객체

= 개발자가 관리하는 것이 아닌, 스프링에게 제어권을 넘긴 객체

 

이러한 Spring Bean을 등록하는 방법은 크게 두가지로 나뉘어진다.

  1. Component Scan을 통해서 등록하기 (Annotation을 이용한 방법)
  2. 빈 설정파일에 직접 등록하기

 

 

이러한 스프링 빈과 관련된 개념으로는 생명주기나 범위, 빈의 생성 과정 등 다양하게 연결된다. 하지만, 이번 포스팅에서는 간단하게 자바 빈과 스프링 빈의 개념만 다루는 것을 목표로 하였기에, 일단은 이렇게 마무리 하고, 조금 더 공부한 이후에 포스팅을 해보려 한다.

 

 

참고 자료

https://jjingho.tistory.com/10