Java/공부

Dependency Injection

mommos 2025. 3. 24. 21:34

Dependency Injection (DI)

어떤 객체가 자신의 의존 객체를 직접 생성하지 않고 외부로부터 주입받는 설계 방식중 하나이다.

 

MemberService memberService = new MemberService(new MemberRepository());

 

이렇게 직접 생성하는 것이 아니라 아래처럼 외부 (AppConfig 나 Spring Container) 에서 주입받는다

@Bean
public MemberService memberService(){
	return new MemberService(memberRepository());
}

 

위와 같은 방식으로 코드를 설계하면 몇가지 장점이 있다

객체 간 결합도 낮춤, 유지보수 쉬움, 테스트하기 쉬운 구조 설계 가능

 

개발을 할때 DB가 계속해서 바뀐다면 DB를 사용하는 곳 마다 하나하나 로직을 바꿔주어야 한다

 

    @Bean
    public MemberRepository memberRepository() {
//        return new MemoryMemberRepository();
        return new JpaMemberRepository(em);
    }

예를들면 이런식

 

하지만 DI를 사용하면 사용하는 파일마다 바꿔주지 않아도 한개의 파일만 들어가서 바꿔주면 된다.

 

사용하는 방법은 AppConfig 파일을 생성한 뒤

@Configuration

어노테이션을 붙여 한곳에서 관리하는 식이다