Post

Spring - DI 에 대하여 간단 이해

들어가며

이번포스트에서는 DI - Dependency Injection 에 대해서 알아보겠습니다.

DI 는 의존성 주입으로 객체를 만들 때 객체를 통해 객체를 생성하는 것이아닌

외부에서 객체를 생성해 사용한다는 개념에서 부터 시작합니다.

객체를 사용하는 방법

약간의 본문 텍스트 추가

결국 차이점은 내부에서 만들어 하냐 - 외부에서 만들어서 주입을 받느냐의 차이점입니다.

중요한 점은 왼쪽과 같이 만들게 된다면 A 는 B 와 C 의 기능의 종속되게 되고,

이러면 개발자가 해당 하는 객체에 라이프 사이클을 모두 신경써서 개발 해야합니다.

만약 A에서 B , C 가 문제가 생기거나 수정 사항이 생기면 이를 제어하기 위해 A 객체 자체가 정상적으로 작동하지 않을 것입니다.

예를 들어 객체 A를 결제프로세스 전체 라고 하고, B를 결제 , C를 로깅하는 메서드를 담고 있다고 가정해보겠습니다.

만약 , C가 동작하는 중 장애가 발생하거나 소요시간이 오래 걸리게 되면 정상적으로 결제 자체가 정상적으로 동작하지 않을 것 입니다. - 일반적으로 nonException인 경우 장애가 발생하여도 선제처리가 되어있지 않다면 일단 올라는 가는데 동작이 원활히 되지 않을 것 입니다.

이런 경우를 강한 결합 - 강결합 이라고 표현합니다. b,c에 의해 a가 종속되었다고 이야기할 수 있습니다.

반대로 오른쪽에 경우 문제가 발생하여도 트랜잭션의 전파가 잘 처리되어 있다면 결제 자체는 정상적으로 작동하게 될 것입니다.

이렇게 의존성을 줄일 수 있는데 이것을 약결합이라고 부릅니다.

Spring이 관리해주는 약결합

약간의 본문 텍스트 추가 (1)

이런식으로 관리가 되어서 라이프 사이클을 직접 관리하지 않아도 되게 됩니다.

그래서 이런식으로 코드를 작성하게 되는 것 입니다.

1
private final PostReposioty postRepository = new PostRepository();

이런 식으로 만드는 것이 아니라

1
private final PostReposioty postRepository

이렇게 주입 받아 만드는 것을 DI라고 하는데 이때 우리가 자주 보는 생성자를 통해 의존성을 주입하여 사용하게 됩니다.

1
2
3
public PostService(PostRepository postRepository){
	this.postRepository = postRepository;
}

변경사항이 있는 경우에는 강한 결합으로 작성 된 코드의 문제점이 발생되어 컴파일러에서 에러를 내줍니다.

This post is licensed under CC BY 4.0 by the author.