IoC는 주로 면접에서 많이 묻는 내용이 아닐까. DI(Dependency Injection, 의존성 주입)와 함께 말이다.
두 가지 내용을 가볍게 정리하여 살펴보고자 한다.
1. IoC
- 기존 개발 방식에서 개발자가 직접 흐름을 제어하지 않고 프레임워크or라이브러리가 대신 제어 하는 것.
public class Coffee {
private Americano americano;
public Coffee() {
americano = new Americano();
}
}
커피 클래스는 아메리카노를 필드로 갖고 생성자 내부에서 직접 생성하여 초기화 한다.
개발자가 직접 관리하는 것이다.
public class Coffee {
@Autowired
private Americano americano;
}
이제 스프링 컨테이너가 아메리카노를 관리하게 되는. 즉 제어가 역전 된 것이다.
어쩌면 번거로울 수도 있는 부분들을 프레임워크가 관리하도록 하여 개발에 있어서 도움을 받을 수 있게 된다.
IoC의 필요와 장점은 결국 아래와 같다.
- 코드의 유연성, 재사용성의 증가
- 테스트용 객체를 쉽게 만들 수 있어 테스트 용이성 증가
- 객체 간 결합도가 낮아 유지보수성 증가
- 개발자가 비즈니스 로직에 집중 할 수 있도록 함
2. DI(Dependency Injection, 의존성 주입)
DI는 IoC 구현을 위한 디자인 패턴 중 하나이며,
객체의 의존 관계를 외부에서 주입 하는 패턴을 말한다.
2-1. DI의 종류
생성자 주입(Spring에서 권장 하는 방식)
public class Coffee {
private Americano americano;
public Coffee(Americano americano) {
this.americano = americano;
}
}
setter 주입
public class Coffee {
private Americano americano;
public void setAmericano(Americano americano) {
this.americano = americano;
}
}
Interface 주입
public class AmericanoInjection {
void inject(Americano americano);
}
public Coffee implements AmericanoInjection {
private Americano americano;
@Override
public void inject(Americano americano) {
this.americano = americano;
}
}
DI를 사용하게 되면 아래와 같은 기댓값이 있다.
- 변경에 덜 취약해진다.
- 모의 객체 주입으로 인해 단위 테스트가 쉬워진다.
- 코드 가독성이 높아진다.
- 재사용성이 높아진다.
DI는 객체가 의존하는 또 다른 객체를 외부에서 선언하고 이를 주입 받아 사용하는 것이다.
IoC를 구현하기 위한 패턴은 많지만 가장 흔하게 들을 수 있는 DI를 적어보았다.
그냥 개념을 간단하게 보기 위한 글이며, 예시 같은 것들에 오류가 있을 수 있다.
괜시리 용어에 놀라 위축 될 때가 있는데, 그 때에 '이게 뭐였지?' 라는 늪에 빠지지 않는 내가 되길 바란다.
참고
ABOUT.Series (12) IoC (Inversion of Control; 제어의 역전) & DI (Dependency Injection; 의존성 주입)
이번 포스팅에서는 제어의 역전(IoC; Inversion of Control)과 의존성 주입(DI; Dependency Injection)에 대해 알아보고자 한다. (예제 코드는 TypeScript를 사용하였다.) < 목차 > IoC (Inversion of Control) - 제어의 역전
bitkunst.tistory.com
https://oneul-losnue.tistory.com/364#IoC%EB%A-%BC%--%EA%B-%AC%ED%--%--%ED%--%--%EB%-A%--%--Pattern
https://velog.io/@ohzzi/Spring-DIIoC-IoC-DI-%EA%B7%B8%EA%B2%8C-%EB%AD%94%EB%8D%B0
[Spring DI/IoC] IoC? DI? 그게 뭔데?
스프링을 공부하다 보면 꼭 나오는 이야기가 있다. 스프링은 IoC 컨테이너로 빈을 관리한다. 스프링은 DI를 사용한다 .DI 방법에는 생성자 주입, setter 주입, 필드 주입 등이 있다.... 아니 근데 대체
velog.io
https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/
의존관계 주입(Dependency Injection) 쉽게 이해하기
이번 글에서는 DI(의존성 주입, 의존관계 주입)의 개념을 설명한다. DI란 용어가 주는 위압감과 부담감 때문에 이해를 미뤄뒀거나, 처음 접하는 분들이 쉽게 이해할 수 있도록 쉽게 설명하고자 한
tecoble.techcourse.co.kr
'간단이론정리 > SPRING' 카테고리의 다른 글
ORM, JPA, Hibernate 그리고 Spring Data JPA (0) | 2024.06.12 |
---|