반응형

스프링을 배우기 시작한 사람이라면 반드시 의존성(dependency)의 개념을 학습해야 한다. 이 의존성이라고 하는 개념은 프레임워크에 익숙하지 않은 사람일수록 이해하기 어려운 것이 사실이지만, 스프링을 이해하기 위해서는 반드시 학습해야 할 내용이므로 꼭 이해하고 넘어가야 한다.

 

 

 

 

의존성(dependency)이란 무엇인가?


'하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없을 때, 의존성이 있다고 한다.'

 

스프링에서 정의하고 있는 의존성은 위와 같이 한 줄로 나타낼 수 있다. 하지만 이 말을 처음 듣자마자 어떤 말인지 이해하기는 쉽지 않을 것이다. 이는 상황으로 생각해보면 조금 더 이해하기 쉬운데, 아래의 예시를 보자.

 

 

한 학급에 선생님 1명과 여러 명의 학생이 있다. 만약 학생이 1명 빠진다고 하면 이 학급이 유지되지 않을 정도로 큰 문제가 생길까? 그렇지 않다. 하지만 만약 선생님이 빠진다면 학급이 제대로 돌아갈 리 없을 것이다. 이 상황에서 학급은 선생님에게 의존적이다. 선생님이 없는 학급은 성립할 수 없기 때문이다.

 

정말 간단한 예시라 스프링에서 적용되는 의존성 주입과는 차이가 있을 수 있지만, 한 객체가 다른 객체가 없이는 제대로 된 역할을 할 수 없다는 것을 이해하면 충분하다.

 

 

 

 

의존성을 주입한다?


의존성이 한 객체가 다른 객체를 필요로 하는 상황이라는 것을 이해했다. 그렇다면 스프링에서 이 의존성을 주입한다고 하는 것은 무엇일까? 의존성을 주입해준다는 말이 잘 이해가 되지 않을 수 있다.

 

주입한다는 것은 말 그대로 바깥에서 안쪽으로 무언가를 밀어 넣어 주는 것을 의미한다. 바꿔 말하면, 주도적으로 필요한 것을 찾는것이 아닌 다른 누군가가 필요한 것을 건네주는 것이다.

 

의존성 주입 역시 그 연장선에서 생각할 수 있다. 어떤 객체가 다른 객체에 의존적인 상황일 때, 필요로 하는 그 객체를 외부의 누군가가 밀어 넣어 주는 것이다.

 

학급과 선생님의 예시에서 이러한 상황을 그림으로 표현하면 아래와 같다. 의존성 주입의 관점에서 생각하면 스프링에서는 학급이 선생님을 필요로 한다는 것을 이해하고, 학급에 선생님 객체를 주입해주고 있는 것이다.

 

 

 

 

스프링에서 이렇게 의존성을 주입하는 이유는 위의 예시에서 이해해 보자.

 

의존성 주입이 없는 상황에서는, 학급에서 선생님이 필요하다면 학교 측에서 선생님을 모집하는 공고를 내야 할 것이다. 그리고 지원자들 중에서 제대로 된 사람을 선별하기 위해서 자격증이 있는지 등의 서류를 검토해야 하고, 서류를 검토한 이후에는 면접을 봐서 괜찮은 사람인지 확인하는 과정 역시 거쳐야 한다.

 

의존성 주입을 해주는 상황에서는, 학급에서는 선생님이 필요하다고 알리고, 외부의 누군가(업체)가 적절한 선생님을 찾아서 학급에 소개해주는 것이다.

 

그러므로 학급의 입장에서는 선생님을 구하는 데에 신경쓸 필요가 없고, 단지 학생들을 가르친다는 본연의 의무에만 집중할 수 있게 된다. 다시 말하면, 본인이 해야 할 영역에만 집중할 수 있다. 이를 코드의 관점에서 다시 정리해본다면, 스프링의 의존성 주입을 사용함으로써 개발자는 다음과 같은 이익을 생각해볼 수 있다.

 

  • 두 객체 간의 관심사(concern)을 분리할 수 있다. (결합도를 낮춘다)
  • 그 결과, 코드의 유지보수가 용이해 진다.

 

스프링에서는 이렇게 객체 간의 의존 관계를 파악해 의존성을 자동으로 주입해준다. 이 때, 의존성을 주입해주는 존재를 애플리케이션 콘텍스트(Application Context) 라고 부르고, 이 존재가 관리하는 스프링의 객체들을 빈(Bean)이라고 부른다.

반응형
복사했습니다!