[Java] 내가 이해한 의존성 주입(Dependency Injection)

Date:     Last Updated:

Spring에서의 중요한 개념.

  • 구글이나 학원, 인강에서 Spring을 처음 배울 때 꼭 나오는 몇가지가 있는게 바로 의존성 주입(DI)과 제어의 역전(IoC)이다.
  • 처음에는 당연히 이게 무슨 헛소리인가 싶었다.. 의존? 뭐? 제어는 뭐하러 역전하지? 이랬다.
  • 그래도 이게 중요한 개념이니까 처음부터 열심히 열심히 설명하는 것이겠지 하면서 이해하려고 노력했다.
  • method 사용법이나 어떤 방법은 외우는 게 더 좋을 수도 있겠지만 DI와 IoC는 외울 필요는 당연히 없고 이해하는 게 중요하다고 생각했다.
  • 왜냐면 Spring을 검색하면 제일 먼저 나오는 것들은 보통 이 Spring이라는 기술이 왜 나왔는지를 설명해주기 때문이다.

의존성 주입(DI)

  • 예~~ㅅ날에 C++을 처음 배울때는 아예 이런 생각, 개념이란 것을 가져본적이 없다. 당연히 객체나, 변수, 기타 여러가지 데이터는 그냥 프로그래머가
  • 사용해야 할 부분에서 생성해서 사용하면 된다는 생각만 했었다. 내 기억에는 OOP를 배울때도 이런 개념을 배운 기억은 없는 것 같다.
  • 다만 DI의 설명을 계속 듣다보니까 일반적으로 DI에 대해서 설명해주는 부분이 조금씩 이해가 가기 시작했다.
  • “의존성 주입” 솔직히 프로그래밍 모르는 입장에서 보면 진짜 절대 알아들을 수 없는 말이고, 프로그래머도 처음 들었을 때 바로 이해하기 어려운 “한글” 이다.
  • 의존성을 주입한다는 말이 처음에는 뭔가 되게 와 닿지 않았는데 여러 설명들을 보면서 최대한 내 기준으로 이해하려고 노력을 했다.

내가 이해한 의존성 주입

  • 처음에는 이걸 도대체 왜 하는거지? 뭐가 좋은거지? 이렇게 생각했다가. 여러가지 설명을 보면서 이해를 계속 하고 있는데
  • 그 중에 하나는 단어에서 나오는 “의존” 이라는 것을 최대한 낮추려고 이런 방법을 사용한다고 생각한다.
  • A,B 클래스가 있을 때 A에서 B를 new로 생성한다면 A가 변경되거나, 특히 삭제된다면 B는 B나 프로그래머의 생각과는 아무 상관없이 변경이 되어버린다.
  • 이때 A클래스 밖에서 B를 생성하고 A에게 주입시켜 준다면 A가 삭제된다고 하더라도 B는 변경은 되었더라도 삭제는 되지 않는다.
  • 그리고 아직은 Spring을 배운 초반이라서 잘 모르겠지만, 결국 이렇게 밖에서 만든 객체나 데이터들은 모두 Spring 컨테이너가 관리를 해주는 것 같다.
  • 그게 아니라면 이건 불가능한 기술이라고 생각하기 때문이다.
  • 라이브러리나, API, FrameWork 등등 프로그래밍 생태계가 정말 고도로 발달하고 편해지고 있지만, 결국 모든 것은 밑단이나 다른 누군가가 처리를 해주지 않는다면
  • 불가능한 방법이기 때문이다.
  • 아직 100% 이해했다고 생각하지 않기 때문에 Spring을 배우는 동안 최대한 이해하려고 해보자.

Leave a comment