What is a Spring Bean (Baeldung 번역)

Jay Jang·2022년 6월 20일
0

Spring

목록 보기
1/2

What is a Spring Bean? | Baeldung

What is a Spring Bean? | Baeldung
Baeldung의 What is a Spring Bean? Article을 번역한 것입니다.

모든 저작권은 Baeldung에 있습니다. All copyrights are in Baeldung.

개요


BeanSpring Framework의 핵심 개념이다. 따라서 Bean을 이해하는 것은 프레임워크의 동작을 파악하고 효과적으로 사용하기 위해 중요하다.

안타깝게도, Spring Bean이 무엇인가라는 간단한 질문에 명확한 답은 없다.
어떤 설명은 너무 낮은 수준이어서 큰 그림을 놓치는 반면, 어떤 것은 너무 모호하다.

이 tutorial은 공식 문서로 시작해 주제와 관련한 자세한 설명을 담아 볼 것이다.



Inversion of Control 제어의 역전


간단히 말해, IoC(Inversion of Control)은 객체가 의존성을 생성하지 않고 정의하는 과정을 말한다. 이 객체는 이러한 의존성을 구성하는 작업을 IoC 컨테이너에 위임한다.

IoC를 더 깊게 알아보기 전에, 두 가지 도메인 클래스를 선언하며 시작하자.



Domain Classes

클래스 하나를 선언했다고 가정해보자.

public class Company {
	private Address address;

	public Company(Address address) {
		this.address = address;
	}

	// getter, setter, and other properties
}

이 클래스는 Address 타입과 연관관계가 필요하다.

public class Address {
    private String street;
    private int number;

    public Address(String street, int number) {
        this.street = street;
        this.number = number;
    }

    // getters and setters
}


기존 접근 방식


일반적으로, 우리는 생성자를 통해 객체를 생성한다.

Address address = new Address("High Street", 1000);
Company company = new Company(address);

이러한 방식에는 전혀 문제가 없다. 그러나 의존성을 관리하기에 더 좋은 방법은 없을까?

한 애플리케이션이 수십, 수백 개의 클래스를 가지고 있다고 생각해 보자. 우리는 때로 애플리케이션 전체 중 단 하나의 인스턴스를 공유하고 싶다. 어떤 때는 사용 사례에 따라 별도의 객체가 필요하기도 하다.

많은 객체를 관리하는 것은 짧은 악몽으로 끝이 난다. ‘제어의 역전’이 우리를 구원해 줄 것이다.

의존성을 스스로 설정하는 것 대신, 객체는 IoC 컨테이너로부터 의존성을 얻을 수 있다. 우리가 해야할 것은 적절한 metadata(설정 메타데이터)를 컨테이너에 등록/제공하는 것 뿐이다.



Bean Configuration


우선 @Component 어노테이션을 클래스에 달아보자.

@Component
public class Company {
    // this body is the same as before
}

다음은 IoC 컨테이너에 Bean metadata를 제공하는 configuration 클래스이다.

@Configuration
@ComponentScan(basePackageClasses = Company.class)
public class Config {
    @Bean
    public Address getAddress() {
        return new Address("High Street", 1000);
    }
}

configuration classAdress 유형의 bean을 생성한다. @ComponentScan annotation을 볼 수 있는데, 이 어노테이션은 컨테이너가 Company 클래스를 포함하는 패키지에서 bean을 찾도록 지시한다.

스프링 IoC 컨테이너가 이러한 유형의 객체를 구성할 때, 모든 객체는 IoC 컨테이너에 의해 관리되므로 Spring bean이라고 불린다.



IoC in Action


우리가 configuration 클래스에 bean을 정의하면서, 우리는 컨테이너를 빌드하기 위해 AnnotationConfigApplicationContext 클래스의 인스턴스가 필요하다.

ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);

간단한 테스트를 통해 bean의 존재와 property 값을 확인할 수 있다.

Company company = context.getBean("company", Company.class);
assertEquals("High Street", company.getAddress().getStreet());
assertEquals(1000, company.getAddress().getNumber());

결과를 통해 IoC 컨테이너가 bean을 올바르게 생성하고 초기화 했음을 확인할 수 있다.



결론


이 article에서는 Spring bean과 IoC 컨테이너의 관계에 간략히 설명했다.



REFERENCE


What is a Spring Bean? | Baeldung

profile
그때는맞고지금은틀리다

0개의 댓글