어제 DI에 대해 공부했는데 복습 겸 좀더 이해하고싶어서 결합력과 인터페이스 차원으로 공부했다.
간단하지만 DI와 결합력으로 인해 인터페이스를 사용하는 이유에 대해 이해하는데 도움이 됐다.
1. 결합력이 높은 상황
B1클래스의 코드를 수정하고 싶어서 B2라는 클래스를 만들어서 B1클래스를 덮어쓰려고 한다.
하지만 S에서 B1클래스 객체를 생성하여 쓰기 때문에 S에서 수정해줘야 한다.
즉 Dao의 소스코드를 고치면 Service의 소스코드도 수정해야 하기 때문에 결합력이 높다.
2. 결합력 낮추기 위해 interface 도입
결합력을 낮추기 위해서 B라는 인터페이스를 사용하고 B2클래스를 구현클래스로 하여 b 객체를 생성한다.
B 인터페이스를 이용하여 B1, B2, B3 등 클래스의 기능을 이용할 수 있으므로 결합력이 비교적 낮아졌다.
하지만 new B2();에서처럼 구현클래스가 B2에서 B3로 바뀐다면 Service를 바꿔줘야만 한다.
그러므로 이때 service와 dao를 결합시키기 위해서 spring의 DI기능을 이용하면 된다.
3. DI 이용
B1을 B2로 바꾸는 작업을 spring이 하게 된다. 외부파일(XML)에서 B1 객체가 생성될 수 있도록 해준다.
유지보수 시 설정파일을 통해서 수정하여, 소스코드를 계속 열어서 수정해야 할 때 발생하는 위험부담을 줄여준다.
출처 :
https://www.youtube.com/watch?v=KJ9Rus3QfUc&list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T&index=2
'spring' 카테고리의 다른 글
[spring] DispatcherServlet (0) | 2021.10.23 |
---|---|
[spring] Context란? (0) | 2021.10.20 |
[spring] annotation 이용한 DI (0) | 2021.10.20 |
[spring] AOP (0) | 2021.10.15 |
[spring] DI, IOC란? (0) | 2021.10.14 |