시작은 Dependency( 의존관계 )로 출발한다.
대충 알고 있을 테니 간단히만 설명하면 ,B가 변했는데 그 변화가 A에게 영향을 줄 때 이를 Dependency가 있다고 하며, A가 B에 의존적이다 라고도 한다.
그럼 DI( Dependency Injection )는?
의존관계인 A,B간에 A에서 B를 직접 생성해서 사용하는게 아니라 , 외부에서 B를 생성해서 주입해준다는 것이다. 다음은 사용시 장점이다
- 의존성이 줄어든다. = 결합도가 낮아진다.
- 기존에는 직접 생성하는 부분 때문에 B를 수정할 때 A의 구현 자체를 수정해야 하지만 , 외부에서 주입하면 B를 수정해도 A의 구현 자체를 수정할 일이 없거나 줄어들게 된다.
- 의존성이 낮아지면 다른 데에다 사용해도 문제가 발생할 가능성이 낮아지니까 코드의 재활용성도 높아진다
- 테스트성이 좋아진다.
- 외부에서 의존성을 직접 주입하기 때문에 , 자신이 원하는 객체의 상태나 특성을 직접 세팅해 주입하기 편해서 , 내가 원하는 테스트 코드를 작성하기 용이하다.
외에도 장점 많은 장점들이 있다...
그러면 IoC( Inversion of Control )는 또 뭐냐? 이건 개념보다 목적을 먼저 설명하는게 이해하는데 더 좋을 것 같다.
IoC의 목적은 개발자가 객체간의 관계를 다 생각하고 , 관계간의 Dependency 하나하나 다 제어하고 있으면 코드는 언제 짤건가? 그래서 개발자한테 있던 제어권을 딴 놈에게 넘기고 개발자는 개발에만 집중하고 싶어서 사용하는 개념이 IoC다.
개념적으로 보자면 IoC는 제어의 역전이라고 하며 , 개발자에게 있던 제어권을 의존관계에 있는 두 객체 사이의 매개체에게 넘기면서 발생하는 제어주체의 변화다.
여기서 매개체를 IoC Container라고 하며 보통 프레임워크에 포함돼있다. IoC Container는 개발자에게 일임받은 제어권을 사용하여 의존성 관리 , 인스턴스 생성해서 주입( DI ) , 나중에는 메모리 해제 해주는 역할까지 해준다.
+간단하게 정리한 그림

'CS' 카테고리의 다른 글
비즈니스 로직 (0) | 2023.04.07 |
---|---|
DDD( Domain Driven Design ) (0) | 2023.04.05 |
어노테이션( @ ) (0) | 2023.03.29 |
오버라이드(@Override) (0) | 2023.03.29 |
인터페이스( interface ) (0) | 2023.03.28 |
시작은 Dependency( 의존관계 )로 출발한다.
대충 알고 있을 테니 간단히만 설명하면 ,B가 변했는데 그 변화가 A에게 영향을 줄 때 이를 Dependency가 있다고 하며, A가 B에 의존적이다 라고도 한다.
그럼 DI( Dependency Injection )는?
의존관계인 A,B간에 A에서 B를 직접 생성해서 사용하는게 아니라 , 외부에서 B를 생성해서 주입해준다는 것이다. 다음은 사용시 장점이다
- 의존성이 줄어든다. = 결합도가 낮아진다.
- 기존에는 직접 생성하는 부분 때문에 B를 수정할 때 A의 구현 자체를 수정해야 하지만 , 외부에서 주입하면 B를 수정해도 A의 구현 자체를 수정할 일이 없거나 줄어들게 된다.
- 의존성이 낮아지면 다른 데에다 사용해도 문제가 발생할 가능성이 낮아지니까 코드의 재활용성도 높아진다
- 테스트성이 좋아진다.
- 외부에서 의존성을 직접 주입하기 때문에 , 자신이 원하는 객체의 상태나 특성을 직접 세팅해 주입하기 편해서 , 내가 원하는 테스트 코드를 작성하기 용이하다.
외에도 장점 많은 장점들이 있다...
그러면 IoC( Inversion of Control )는 또 뭐냐? 이건 개념보다 목적을 먼저 설명하는게 이해하는데 더 좋을 것 같다.
IoC의 목적은 개발자가 객체간의 관계를 다 생각하고 , 관계간의 Dependency 하나하나 다 제어하고 있으면 코드는 언제 짤건가? 그래서 개발자한테 있던 제어권을 딴 놈에게 넘기고 개발자는 개발에만 집중하고 싶어서 사용하는 개념이 IoC다.
개념적으로 보자면 IoC는 제어의 역전이라고 하며 , 개발자에게 있던 제어권을 의존관계에 있는 두 객체 사이의 매개체에게 넘기면서 발생하는 제어주체의 변화다.
여기서 매개체를 IoC Container라고 하며 보통 프레임워크에 포함돼있다. IoC Container는 개발자에게 일임받은 제어권을 사용하여 의존성 관리 , 인스턴스 생성해서 주입( DI ) , 나중에는 메모리 해제 해주는 역할까지 해준다.
+간단하게 정리한 그림

'CS' 카테고리의 다른 글
비즈니스 로직 (0) | 2023.04.07 |
---|---|
DDD( Domain Driven Design ) (0) | 2023.04.05 |
어노테이션( @ ) (0) | 2023.03.29 |
오버라이드(@Override) (0) | 2023.03.29 |
인터페이스( interface ) (0) | 2023.03.28 |