///////
Search
🌱

IoC, DI는 무엇이고 어떠한 장점이 있을까요?

Inversion of Control (IoC)

객체의 생성, 관계설정, 사용, 제거 등 객체 전반에 걸친 모든 제어권을 애플리케이션이 갖는게 아니라 프레임워크의 컨테이너에게 넘기는 것
객체의 관리를 컨테이너에 맡겨 제어건이 넘어가기 때문에 제어의 역전이라고 부른다
제어의 역전을 통해 의존성 주입, 관점 지향 프로그래밍 (AOP) 등이 가능해진다

Dependency Injection (DI)

제어 역전의 방법 중 하나
외부로부터 전달받는 것으로 인스턴스 객체를 만드는 것
DI의 3 가지 방법
1.
생성자
class BurgerChef { private BurgerRecipe burgerRecipe; public BurgerChef(BurgerRecipe burgerRecipe) { this.burgerRecipe = burgerRecipe; } }
Java
복사
no-argument constructor 나 no-argument static factory method로 빈을 생성해 줘야 사용가능
변경 가능성이 있는 의존관계에서 사용
생성자 호출 시점에 딱 1번만 호출되는 것이 보장
불변, 필수 의존관계에 사용
권장되는 DI 방법
b.
필드 객체 선언
@Service public class StudentServiceImpl implements StudentService { @Autowired private CourseService courseService; @Override public void studentMethod() { courseService.courseMethod(); } }
Java
복사
코드가 간결하지만 외부에서 변경이 불가능해서 테스트하기 힘들다는 단점이 존재
사용하지 않는 것이 좋다
c.
setter() 메서드를 이용
@Service public class StudentServiceImpl implements StudentService { private CourseService courseService; @Autowired public void setCourseService(CourseService courseService) { this.courseService = courseService; } @Override public void studentMethod() { courseService.courseMethod(); } }
Java
복사
사용하지 않는 것이 좋다
장점
1.
의존성이 줄어든다
주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게됨
2.
재사용성이 높아진다
3.
테스트하기 좋은 코드가 된다
4.
가독성이 높아진다