쉽지않은 블로그
[Spring] DI & IOC (2) 의존성 주입 본문
전 페이지에서 결합력이 무엇인가를 알아보았다.
머리가 아프니 그냥 결합력을 아예 신경 쓰지 되지 않고 코딩을 하면 되지 않냐고 생각할 수 있는데
Spring-MVC의 구조를 예시로 보면

스프링을 이용하여 web application을 만든다고 하면 다음과 같은 구조로 나오게 될 것이다
1. 사용자(Client Application )는 사용자를 나타낸다
2.Controller 는 사용자가 요청을 보낼때 제일 먼저 작동하는 함수
3.Service는 비즈니스로직을 처리하는 함수
4.Repository는 DB와 상호작용을 하는 함수
이렇게 역할을 분리 시키는 이유는
스프링에서 지향하는 SRP( Single Responsibility Principle)
관리를 용이하게 하기 위해 하나의 함수는 하나의 일에만 집중한다는 원칙을 지켜주기 위해서 이다.
우리의 목표는 설계를 할떄 최대한 객체 간의 결합력을 최소로 하여
1. 유지보수가 쉽고
2. 테스트하기 쉬우며
3. 쉽게 교체 가능하게끔 하게 하는 것이다.
결합력을 느슨하게 하기 위해 어떻게 하였는지도 전 페이지에서 예시를 통해 알아보았다.
하지만 저런 식으로 JAVA 코드만으로 해결하는 것은 방대한 시스템을 관리하기엔 한계가 있다
예를 들어 ) 코드의 양이 많은 프로그램의 경우
모든 인스턴스를 생성하고 서로 연결하는 과정을 수동으로 작성해주어야 한다.
이러한 문제점을 극복하기 위해 등장한 게 스프링 프레임워크이다
스프링 프레임워크의 IOC 컨테이너를 이용하여 의존 관계 주입(Dependency injection)을 편하게 적용할 수 있다.
이전 페이지 예시를 통해 먼저 알아야 할 용어를 정리한다.
public class A { private B_interface b; public A(B_interface b) { this.b = b; } public int doSomeThing() { int val = b.getDate(); .. .. .. return val; } } public interface B_interface { int getDate(); } public class B implements B_interface{ @Override public int getDate() { // TODO Auto-generated method stub return 10; } } public static void main(String[] args) { B b = new B(); A a = new A(b); a.doSomeThing(); }
bean (빈) | IOC 컨테이너가 관리해주는 객체를 bean 이라고 한다 ioc 컨테이너가 관리를 해준다는것을 제외하면 일반 JAVA의 객체와 다를것이 없다. (개발할때는 서로 의존관계인 객체들만 bean 으로 등록해주면 될거같다) |
wiring (와이어링) | 의존관계의 객체를 사용하기 위해 생성자함수의 인자로 제공받는 것과 같은것들을 와이어링 이라고 한다 (의존관계의 객체를 연결하는 것 예시코드 6,35줄) |
Dependency injection (의존성 주입) | 위의 빈 식별 , 생성 및 와이어링 의존 관계 프로세스를 의존성 주입이라고 한다. |
IOC(inversion of control) | 결합력을 느슨하게 하여 A클래스가 B클래스를 생성할 책임이 없어진 상황을 Ioc 라고 한다. |
스프링의 IOC 컨테이너 프레임워크를 사용하면 위의 예시 코드를 다음과 같이 편하게 바꿔줄 수 있다.
public class A { @Autowired B b; public doSomeThing() { b.getDate(); .... .... } } //*************************************** @Component public class B { public int getData() { // TODO Auto-generated method stub return 10; } }
'개발공부 > 스프링' 카테고리의 다른 글
객체지향을 설계하는 원칙 5가지 [SOLID] (0) | 2021.04.17 |
---|---|
[Spring] DI & IOC (3) 스프링 IoC 컨테이너 (0) | 2021.04.13 |
[Spring] DI & IOC (1) 느슨한 결합력 (0) | 2021.04.13 |
spring-JDBC 라이브러리-3 (0) | 2021.03.25 |
spring-JDBC 라이브러리-2 (0) | 2021.03.24 |