의존성주입(DI)이란?

박철민·2023년 4월 7일
0

CS 지식

목록 보기
8/8

의존성주입

의존성주입이란?

의존성주입은 객체지향언어에서 SOLID 원칙을 지키는데 많은 도움을 주는 방식입니다.
이에 대해서 자세히 알아야 하겠죠?
의존성 주입을 알기 전!!! 우선 의존성에 대해서 이야기를 해보죠!

의존성이란?

의존성이란 무엇일까요? 의존을 하는 성질이라고 이해하면 됩니다.
의존? 프로그램에서 의존을 하나요?

네! 그렇습니다! 프로그램들은 서로 서로 의존을 하기도 합니다.

이를 쉽게 이야기하면 A가 B를 의존한다 즉 A가 B를 구현해서 사용하고 있는 경우를 생각해봅시다.

경찰이 총이라는 클래스를 갖고 있고 총에는 shoot이라는 메서드가 있다고 생각해봅시다!

police.getGun().shoot() 으로 우리는 police 개체가 가지고 있는 gun 개체를 갖고 shoot이라는 메서드를 통해 총을 쏘도록 만들었습니다!

익숙한 형태에 프로그램인데요. 하지만 이 프로그램에 경찰은 총에 의존하고 있습니다.

총에 의존한다는 의미는 총이 변하면 경찰의 코드들도 바뀐다는 것입니다.

자 총에 메서드인 shoot()을 shoooooooot()이라고 바꾸면 어떻게 될까요? police가 사용한 shoot()메서드 또한 모두 바꿔줘야 하는 것입니다.

이렇게 의존하고 있는 대상이 바뀌면 그걸 바라보는 객체도 바뀌어야 하는 것을 의존한다.라고 합니다.

딱 봐도 유지보수성이 떨어지는데요. 이를 해결하기 위한 것이 바로 의존성주입입니다.

의존성주입 원리

의존성주입이란 메인 모듈이 '직접' 다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자가 이 부분을 가로채 메인 모듈이 '간접'적으로 의존성을 주입하는 방식입니다.

즉 위에 경찰이 직접 총을 갖고 있는 것이 아니라 중간에 관리자가 이를 가로채 원하는 결과가 나오도록 바꿔줍니다.

경찰이 shoot을 하면 총기 관리자는 이것이 shoot이 shoooooooot을 연결 시키면 됩니다. 즉 경찰이 총기를 의존하던 관계를 경찰과 총기들이 관리자를 의존하도록 만들어주었습니다.

이렇게 하면 유지보수성이 높아지고 한 곳에서 관리가 편합니다.

예를 들어 총이 아니라 수갑이라는 클래스가 새로 들어간다면 이를 관리자가 관리하고 경찰은 이 관리자에게서 사용하면 언제든지 편하게 사용이 가능합니다.

이러한 총기와 수갑이 경찰에게 의존 받는 것이 아닌 관리자를 의존하게 됩니다. 이렇게 의존의 관계가 역전되었기에 의존선 역전이라고 합니다

장점

외부에서 모듈을 생성하여 집어넣는 구조가 되기 때문에 모듈들을 쉽게 교체할 수 있는 구조입니다.
단위 테스팅과 마이그레이션이 쉬워집니다.
애플리케이션 의존성 방향이 좀 더 일관되어 코드를 추론하기가 수워집니다.

단점

코드의 양은 결국 늘어났습니다. 개발에서 이러한 코드의 증가는 COST라고 생각해야 합니다.
종속성 주입 자체가 컴파일이 아닌 런타임떄 실행하기 때문에 종속성 주입에 관한 에러를 잡기가 어려워질 수 있습니다.

요약

의존성 주입은 의존 관계 때문에 떨어지는 유지보수성 및 여러 불편함을 개선하기 위한 것이다. 의존성을 중간 관리자가 가로채서 이를 한 곳에서 관리하도록 합니다.

이러한 코드의 발생에 의해 COST가 발생하지만 유지 보수성과 테스트에 장점이 있기에 현업에서 많이 사용되고 있습니다.

Spring에서는 BEAN을 통해서 이를 관리하고 있습니다!

profile
멘땅에 헤딩하는 사람

0개의 댓글