Back-end/SPRING / / 2023. 8. 3. 00:24

[Spring] Spring Bean 이란?

반응형

Spring Bean이란

Spring Bean이란 Spring Framwork가 관리하는 Java 객체를 의미한다. Bean은 스프링 컨테이너에 의해 생성, 소멸, 관리 되며 스프링의 핵심 기능 중 하나인 Ioc(Incersion of Control)을 구현하는데 사용된다.

<출처> https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html

 

우선 스프링 빈을 사용하고 사용하지 않은 예시를 통해 둘의 차이를 설명하도록 하겠다.

 

Spring Bean을 사용하지 않은 경우

package bean_test_unusing;

public class UnUsing_SpringBean {
	public static void main(String[] args) {
		var order = new Order();
		var menu = new Menu(order);
		menu.process();
				
	}
}


class Order {
    public void pizza() {
        System.out.println("Pizza");
    }
}

class Menu {

	private Order order;

	public Menu(Order order) {
		super();
		this.order = order;
	}

	public void process() {
        order.pizza();
    }
}

위의 경우 스프링 빈을 사용하지 않은 코드의 예시이며 코드를 보면 알수 있듯이 각각에 클래스에 대한 객체를 개발자가 직접 생성시켜 코드를 실행하게 된다. 그러면 스프링 빈을 사용할 경우 어떤 차이가 있을까?

 

Spring Bean을 사용한 경우

package bean_test;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

@ComponentScan
public class Using_SpringBean {
	public static void main(String[] args) {
		
		try (var context = new AnnotationConfigApplicationContext(Using_SpringBean.class)) {
			Menu menu = context.getBean(Menu.class);
			menu.process();
			
		} catch (BeansException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}
}


@Component
class Order {
    public void pizza() {
        System.out.println("Pizza");
    }
}

@Component
class Menu {
	
	@Autowired
	private Order order;

	public void process() {
        order.pizza();
    }
}

스프링 빈을 사용한 경우 Order클래스의 객체를 따로 생성하여 Menu클래스에 입력할 필요없이 결과를 출력할 수 있다.

그러면 스프링 빈을 사용함으로써 얻을 수 있는 장점은 무엇일까?

 

1. 의존성 관리 및 제어의 용이성 : 스프링 컨테이너는 빈들 간의 의존성을 관리하고 주입하는 기능을 제공하여 개발자가 직접 객체를 생성해야하는 번거로움을 줄여준다.

2. IoC (Inversion of Control) : 객체 생성과 의존성 주입을 프레임 워크에 위임함으로 애플리케이션 제어 흐름을 개발자가 아닌 프레임 워크가 관리하도록 한다.

3. 싱글톤 객체 관리 : 스프링 컨테이너는 기본적으로 빈들을 싱글톤으로 관리하여 애플리케이션 전반에서 동일한 객체를 재사용 할 수 있다.

 

위와 같은 핵심적인 장점들 이외에도 AOP, 테스트 용이성, 트랜젝션 관리 등이 있다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유