SSAFY11th-book-study / book-study

SSAFY 11기 6반의 '토비의 스프링 스터디'
0 stars 0 forks source link

[3.4.2] IoC vs DI #33

Open gmelon opened 7 months ago

gmelon commented 7 months ago

질문이 두 가지 입니다.

  1. 먼저 p.241 하단 코드를 보면 new JdbcContext() 부분에 (IoC) 라고 표시되어 있는데 어떤 의미에서 IoC라고 하는건지 이해가 잘 되질 않았습니다.

  2. 이를 이해해보려고 자료를 찾다가 IoC와 DI의 개념을 명확히 정리하지 못하고 있다고 느껴서 두 번째 질문은 IoC와 DI가 정확히 어떻게 다른가? 입니다.

a-young-kim commented 7 months ago
  1. 저는 IoC의 의미가 메소드나 객체의 호출작업을 개발자가 아닌 외부에서 결정하는 것으로 이해했습니다. 즉 코드의 흐름이 외부에 의해 결정되는 것입니다. image new JdbcContext()는 개발자가 지정한 시점에서 실행되는 것이 아니라 setDataSource 메소드가 실행되는 시점에서 JdbcContext가 생성되기 때문에 IoC라고 하는 것으로 이해했습니다. 즉 UserDao 클래스가 직접 jdbcContext 생성에 영향을 미치는 것이 아니라 UserDao 클래스를 사용하는 곳에서 setDataSource 메소드를 사용하여 jdbcContext 클래스를 생성하기 때문에 IoC라고 이해했습니다.
gmelon commented 7 months ago
  1. 저는 IoC의 의미가 메소드나 객체의 호출작업을 개발자가 아닌 외부에서 결정하는 것으로 이해했습니다. 즉 코드의 흐름이 외부에 의해 결정되는 것입니다. image new JdbcContext()는 개발자가 지정한 시점에서 실행되는 것이 아니라 setDataSource 메소드가 실행되는 시점에서 JdbcContext가 생성되기 때문에 IoC라고 하는 것으로 이해했습니다. 즉 UserDao 클래스가 직접 jdbcContext 생성에 영향을 미치는 것이 아니라 UserDao 클래스를 사용하는 곳에서 setDataSource 메소드를 사용하여 jdbcContext 클래스를 생성하기 때문에 IoC라고 이해했습니다.

@a-young-kim 아 이해했습니다.

그럼 추가로 궁금한 것은 현재는 UserDao의 입장에서 setter가 호출될 때 JdbcContext가 생성되므로 IoC가 적용되었다고 볼 수 있는 것인데, UserDao에서 순차적으로 직접 JdbcContext를 생성해도 JdbcContext 입장에서는 IoC라고 볼 수 있을까요?

\2. IoC는 단순히 프로그램의 제어를 역전시키는 것을 의미하기 때문에 DI 말고도 서비스 로케이터 패턴, 이벤트 드리븐 프로그램 등을 통해서도 달성할 수 있다고 합니다.

DI는 IoC 원칙을 실현하기 위한 디자인 패턴 중 하나로, 한 오브젝트가 필요로 하는 오브젝트에 대한 초기화/생성/주입을 외부에서 해주어 응집도 결합도를 낮출 수 있게 도와줍니다.