Spring IOC 이해하기

홍성우·2023년 2월 1일
0

SPRING

목록 보기
2/4

스프링 컨테이너를 사용하지 않고 기존에 사용하는 방식으로 구현했다면

A클래스가 B객체의 메서드를 구현하고 싶다면

이렇게 구현해서 사용했을 것이다.

하지만 이러한 구조는 A클래스가 B클래스를 직접적으로 참조하므로 결합도가 높다.


결합도를 낮추기 위한 방법으로 Spring IOC 컨테이너를 사용한다.

IOC 컨테이너를 사용하여 구현하려면

먼저 사용하고자 하는 클래스를 Bean으로 등록해야한다.

클래스를 Bean으로 등록하는 방법은 3가지가 있다.

  1. XML - application-context.xml
  2. 어노테이션
  3. 자바소스

3가지 방법 중 한가지 이상을 사용하여 Bean으로 등록했다면

IOC 컨테이너가 관리하는 영역에 들어간 것이다.

그리고 필요한 시점에 bean 객체를 주입해준다.

의존성을 주입 하는 방법은
Dependency Injection 과 Dependecy Lookup 두가지 가 있다.

Dependency Injection
1. setter 메서드
2. constructor 주입
3. 메서드 주입

  1. application-context.xml로 bean등록 의존성 주입

그림과 같이 constructor 주입 방법 과 setter 메서드 방법을 xml방식으로 등록하는 방법이다.

설명을 하자면 ClubServiceLogic 안에 clubStore 인테이스를 가지고 있다.
생성자로 clubStore인터페이스의 구현체를 가지고 있다면
application-context.xml을 참조하여 의존성을 주입한다.(생성자 주입 부분)

즉, ClubServiceLogic클래스는 clubStore의 인터페이스 정보만 알게 된다.
(구현체에 대한 정보는 모름)

  1. 어노테이션을 사용하여 Bean으로 등록한 다음 의존성 주입

@Service 어노테이션을 사용 - 비즈니스 로직 처리 (ID값 지정 가능)

@Reposittory 어노테이션을 사용 - 저장소 연결 (ID값 지정 가능)

이제 전체 흐름을 살펴보자


먼저 UI 에서 비즈니스 로직을 호출할때 MemberSerivce인테이스가 호출되고 구현체인
MemberServiceLogic 실제 수행되는데 앞서 @Service 어노테이션을 설정되어있어
Spring IOC 컨테이너가 구현체를 알아서 주입해준다.
그리고 MemberServiceLogic 안에 MemberStore 인테이스를 가지고 있다.
MemberStore 인터페이스 구현체인 MemberMapstore는 @Reposittory 어노테이션 설정이 되어있기 때문에 IOC컨테이너가 주입을 해준다.

[참고]
@Service
@Reposittory

안에는 @Component 어노테이션이 존재하고 앞서 component-scan으로 bean을 등록 했기 때문에 관리하는 컴포넌트(bean)로 인식하게 된것이다.

Dependecy Lookup(보통 사용하지 않음)

profile
제 블로그를 방문해 주셔서 감사합니다

0개의 댓글