728x90

 

Spring Bean (스프링 빈)이란❓


Spring Bean은 Spring Framework에서 관리되는 객체를 의미합니다. 의존성 주입(Dependency Injection, DI)객체 간의 의존 관계를 개발자가 직접 관리하지 않고, 외부에서 의존하는 객체를 주입하여 사용하는 디자인 패턴입니다.
DI는 객체 간의 결합도를 낮추고 유연하고 재사용 가능한 코드를 작성할 수 있도록 도와줍니다.
Spring Framework은 의존성 주입(Dependency Injection)을 통해 객체들을 생성, 관리, 연결하는데, 이러한 객체들을 “Spring Bean”이라고 합니다.

Spring Bean은 일반적으로 자바 클래스로 표현되며, Spring 컨테이너(ApplicationContext)에 의해 생성되고 관리됩니다. Spring Bean은 개발자가 정의한 설정 파일(XML 또는 Java Config)에 기반하여 컨테이너에 등록됩니다. 컨테이너는 Spring Bean의 생명 주기를 관리합니다.

 

Spring Bean의 주요 특징:

  1. 스프링 컨테이너에 등록: Spring Bean은 스프링 컨테이너에 등록되어야 합니다. 등록된 Bean은 컨테이너에서 관리되고 필요한 곳에서 주입(Dependency Injection)되어 사용됩니다.

  2. 라이프사이클 관리: Spring 컨테이너는 Spring Bean의 라이프사이클을 관리합니다. Bean의 생성, 초기화, 소멸 등을 컨테이너가 담당합니다.

  3. 의존성 주입: Spring Bean은 의존성 주입(Dependency Injection)을 통해 다른 Bean과 연결됩니다. 이를 통해 객체 간의 결합도를 낮출 수 있고, 유연하고 재사용 가능한 애플리케이션을 만들 수 있습니다.

  4. 스코프: Spring Bean은 스코프에 따라 다르게 관리됩니다. 주요 스코프로는 Singleton, Prototype, Request, Session 등이 있으며, 각 스코프에 따라 Bean의 생성과 소멸 시점이 달라집니다.

  5. 어노테이션과 XML 설정: Spring Bean은 어노테이션을 사용하여 자동으로 등록할 수도 있고, XML 설정 파일을 통해 수동으로 등록할 수도 있습니다. 주로 XML 설정 방식은 과거에 사용되었으며, 현재는 주로 어노테이션을 사용하는 방식이 일반적입니다.

 

일반적으로 객체 간의 의존 관계는 하나의 객체가 다른 객체를 생성하거나 참조하여 사용하는 것으로 나타납니다. 이러한 의존 관계는 코드 내에서 강한 결합도를 만들어내고, 객체의 생성과 관리를 담당하는 클래스가 다른 객체들에 대한 정보를 갖고 있어야 한다는 문제를 발생시킵니다. 이로 인해 코드의 유연성과 재사용성이 저하되는 문제가 발생할 수 있습니다.

DI는 이러한 문제를 해결하기 위해 의존하는 객체를 외부에서 주입하는 방식을 채택합니다. 주입된 객체는 해당 객체가 필요한 시점에 사용됩니다. 주로 생성자(Constructor) 주입, Setter 주입, 인터페이스 주입 등의 방식을 사용합니다.

 

        package hello.hellospring.controller;


        import hello.hellospring.service.MemberService;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Controller;

        //스프링이 처음에 뜰 때, 스프링 컨테이너라는 박스가 생기는데 만약 그곳에 컨트롤러 애노테이션이 있으면 
	//MemberController객체를 생성해서 담아준 후 스프링 빈이 관리해줍니다.
        @Controller
        public class MemberController {

            1. DI(Dipendency Injection) 필드 주입 방식
            @Autowired private MemberService memberService();


            2.DI(Dipendency Injection) setter 방식
            private MemberService memberService;

            @Autowired
            public void setMemberService(MemberService memberService) {
                this.memberService = memberService;
            }


            3.DI(Dipendency Injection) 생성자 주입 방식

            private final MemberService memberService;

            @Autowired
            public MemberController (MemberService memberService) {
                this.memberService = memberService;
            }
        }

 

DI의 주요 이점은 다음과 같습니다:

  1. 결합도 감소: 객체 간의 의존 관계를 외부에서 관리하기 때문에 객체들 간의 결합도가 낮아집니다. 이로 인해 하나의 객체 수정이 다른 객체에 미치는 영향을 최소화하고, 코드의 유지 보수성이 향상됩니다.

  2. 재사용성과 확장성: DI를 통해 의존하는 객체를 외부에서 주입받기 때문에 해당 객체의 변경 없이 쉽게 다른 객체와 조합하여 재사용하거나 기능을 확장할 수 있습니다.

  3. 테스트 용이성: 의존 객체를 모의(Mock) 객체로 대체하여 단위 테스트를 수행할 수 있습니다. 의존 객체의 동작을 외부에서 주입하여 테스트를 진행할 수 있기 때문에 테스트 용이성이 높아집니다.

Spring Framework는 DI를 통해 객체 간의 의존 관계를 관리하고 주입하는 기능을 제공합니다.
이를 통해 Spring에서는 객체 지향적인 애플리케이션을 개발할 수 있으며, 유연하고 확장 가능한 코드를 작성할 수 있습니다.

728x90
반응형

+ Recent posts