Spring Study - 1주차 -

ChapJun·2021년 11월 26일
1

주제 : 스프링의 중심 IoC (Inversion of Control - 제어의 역전), DI (의존성 주입)

DI(Dependency Injection)

  • 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식
  • DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

객체가 다른 객체와 상호 작용하는 경우를 객체의 의존 관계 라고 한다.

DI는 객체 간의 의존 관계를 (생성자 인수 or 세터 메소드 인수)로 명시하고 객체를 생성할 때 생성자나 세터를 통해 의존 관계를 주입하는 방식을 따른다.

1. 생성자 방식 (표준)

  • OCP 원칙을 지키며 객체의 불변성을 확보할 수 있다.
  • 테스트 코드의 작성이 용이해진다.
  • final 키워드를 사용할 수 있고, Lombok과의 결합을 통해 코드를 간결하게 작성할 수 있다
    -> @RequiredArgsConstructor (final + Lombok)
  • 순환 참조 문제를 를 애플리케이션 구동(객체의 생성) 시점에 파악하여 방지할 수 있다.

2. 세터 방식

  • 의존 관계는 변하는 일이 거의 없는데, 세터는 변할 가능성이 생김

3. @Autowired 방식

  • 외부에서 변경이 불가능 -> 테스트 코드 작성 불가능

IoC 컨테이너

  • 스프링 IoC 컨테이너는 스프링 어플리케이션에서 존재하는 객체를 생성하고 의존 관계를 주입하는 일을 담당한다. (어플리케이션 객체 : Bean -> 싱글톤 패턴)

  • IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부(스프링)에서 결정되는 것을 의미한다.

  • 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.

1. 객체 생성

2. 의존성 객체 주입
스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.

3. 의존성 객체 메소드 호출

스프링 기반 어플리케이션에서 객체와 그들의 의존 관계에 대한 정보는 메타데이터를 사용해 지정한다. (방식 - XML, 어노테이션(자바코드))

이런식으로 스프링 컨테이너가 객체에 추가 기능을 부여하고 애플리케이션 객체를 평범한 자바 객체(POJO)로 모델링 할 수 있다. (Ex. ~~Controller, ~~Service)

스프링은 객체 생성과 의존 관계 주입을 처리함으로써 자바 Application 조합을 쉽게 만들어준다.

profile
Chap Chap

1개의 댓글

comment-user-thumbnail
2022년 1월 22일

정독 완료욤 ^_^

답글 달기