IoC 제어의 역전 면접 질문에 대한 답변
IoC는 객체 생성과 관리의 제어권을 외부에 맡기는 것 입니다. IoC를 적용하지 않으면 클래스 내부에 new로 객체를 직접 생성하고, 의존성 연결 코드, 객체 생명주기 관리 등 비즈니스 로직과 관련 없는 많은 일들을 개발자가 직접 처리해야 합니다.
하지만 IoC를 적용하면 클래스가 구체적인 구현체가 아닌 인터페이스에만 의존하게 되어, 결합도가 낮아집니다. 또한 실체 객체 생성과 관리는 Spring Container에게 맡김으로써 개발자가 비즈니스 로직 작성에만 집중할 수 있습니다. 생성자나 필드를 통해 외부에서 받아서 사용하는 방식으로써 테스트하기가 쉽고, 객체간 결합도가 낮아져서 유지보수가 쉬워집니다.
꼬리 질문
Q. “그럼 개발자가 더 편해지는 것 외에 다른 장점은?”
코드 재사용성이 높아지고 설정 변경만으로 다른 구현체를 사용할 수 있어서 시스템 유연성이 크게 증가합니다
Q. “IoC 없이도 개발할 수 있는데 꼭 필요한가요?”
프로젝트가 작으면 오버 엔지니어링이겠지만 프로젝트가 커질수록 의존성 관리 복잡도가 기하급수적으로 상승하고 늘어나기에 IoC가 없이는 유지 보수가 불가능해집니다.