의존성주입(DI) 3가지

Aram Kim·2023년 1월 14일

Learn about

목록 보기
5/6

의존성 주입 (Dependent Injection) 에 대해서 알아보자.

의존성 주입이란?

하나의 객체가 다른 객체의 의존성을 제공하는 테크닉.
클라이언트가 어떤 서비스를 사용할 것인지를 지정하는 게 아닌, 클라이언트에게 무슨 서비스를 사용할 것인지를 말해주는 것.

의존성 주입의 의도

객체의 생성과 사용의 관심을 분리하기 위함. 이는 가독성코드 재사용을 높혀준다.

의존성 주입의 이점

  • 의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈들간의 결합도를 낮출 수 있다.
  • 코드 재사용을 높여서 작성된 모듈을 여러 곳에서 소드 코드의 수정 없이 사용할 수 있다.
  • 모의 객체 등을 이용한 단위 테스트의 편의성을 높여준다.

의존성 주입의 적용 유형

1. 생성자 주입

@Controller
public class MemberController {

    private final MemberService memberService;

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

2. setter를 통한 주입

@Controller
public class MemberController {

    private MemberService memberService;

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

생성은 생성대로 되고, setter를 통한
누군가가 controller를 호출했을 때, public으로 열려있어야 한다.
그래서 노출이 되므로, 누군가가 잘못 수정하게 되면 문제가 생길 수 있다.

3. 필드를 통한 주입

@Controller
public class MemberController {
    
    @Autowired
    private MemberService memberService;
}
    

spring이 실행될 때, Autowird에 의해 연결이 되고 그 후, 중간에 수정을 하고 싶어도 할 수 없다. 추천하지 않음.

의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.

실행 중에 동적으로 변한다는 것은 runtime 중 코드를 변경한다는 뜻.
만약 변경을 해야 한다면 config를 수정하고 서버에 다시 올려야한다.

출처 : https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EC%84%B1_%EC%A3%BC%EC%9E%85
https://www.inflearn.com/course/스프링-입문-스프링부트/unit/49587?category=questionDetail

profile
✏️ 성장중인 백엔드 개발자입니다.

0개의 댓글