오루빠루
240
2022-01-15 18:43:23
4
166

스프링의 IoC, 제어 역전에 대해


안녕하세요

토비의 스트링부트를 참고삼아 공부하는 백엔드 개발자 지망생입니다.

다름아니라,

해당 책의 내용에 따라 제가 이해 한 바로는

프레임워크는 일련의 작업 흐름이 정해져있는 것으로 객체 선택, 생성과 사용 등 제어권을 가진 어떤 클래스나 모듈을 말하는것으로 이해 했습니다.

그렇다면 프레임워크는 IoC개념이 적용 되어 있어야 한다는것에도 납득이 갑니다.

어떤 프레임워크든 그것을 사용 한다는것 자체가 우리의 어플리케이션에 IoC 개념을 적용 한다는 말과 일맥상통 하는것 같은데

스프링 프레임워크에대해 이야기할때 유독 새삼스럽게 IoC, DI를 강조하는 이유는 뭔가요??

제가 아직 진도를 많이 못나가 더 깊은 이야기를 알지 못해서 이런 의문이 생기는 걸까요?

0
  • 답변 4

  • 구직인
    619
    2022-01-15 21:27:58

    스프링으로 설명하는 DI, IoC를 보면 더 헷갈립니다.

    그냥 di,ioc를 먼저 보세요.

    별거없습니다. 하나의 디자인패턴입니다.


    이것들을 이야기할때 꼭 스프링에 물려서 생각하는데 스프링이 그걸 하기 좀 편하게 지원하는것이지

    관계는 없습니다. 


    강조하는 이유는 단 하나, 어디서 들었습니다.

    어디서 그럴듯한걸 듣고 중요하다고 말하는것이죠. 대~부분의 스프링 사이트는 신경도 안씁니다.

    오늘 okky의 다른 글 중에 5년차 개발자가 클린코드, 리팩토링에 관한 책을 읽지도 않는 것을 꾸짖는데

    비추천박힙니다. 이게 현실인거죠.

    그 사람들이 유일하게 하는 패턴이 di, ioc라서 우기는건데, 정작 실전에서 그것을 인지한 상태로 사용할까 의문이죠. ㅋㅋ


    그냥 아는척하려고 한다고 생각합니다. 별것도 아닌겁니다.

    어찌보면 당연하게 해야할 의존성 분리인데 어디서 듣고 왔으니 아는척하는 용도입니다.

    원래 해야되는겁니다.

  • Dierslair
    5k
    2022-01-15 21:42:09 작성 2022-01-15 21:43:03 수정됨

    우리가 프레임워크를 사용하는 이유는 "코드는 적게 짜고 기능은 많이" 를 달성하기 위해서입니다.

    코드는 크게 "로직의 흐름"과 "하나의 기능에 집중한 단위 로직"으로 나뉩니다.
    흐름을 짜는 건 어렵습니다. 반대로 하나의 기능을 만드는 로직은 상대적으로 짜기 쉽고 파악하기에도 오랜 시간이 걸리지 않습니다.

    그래서 "코드 흐름은 네가(프레임워크) 처리해 줘, 난(프로그래머) 단위 로직(비즈니스 로직)만 짤게."

    이게 IoC(제어의 역전)입니다. 프로그래머는 HttpServletRequest가 어디서 와서 어떻게 만들어지고 이걸 POJO로 만드는 걸 전혀 신경쓰지 않아도 됩니다. 그냥 컨트롤러에서 원하는 타입으로 받아서 서비스, 리파지토리만 제대로 짜 놓으면 그걸 받아가서 프레임워크가 클라이언트까지 알아서 처리해줍니다.

    이걸 프로그래머가 직접 다 해야 한다면 생산성이 엄청 떨어지겠죠.. 그리고 엄청난 파편화가 발생합니다.

    스프링이 왜 이렇게 유명할까요? 추상화를 상당히 잘 사용해서 다양한 기능을 잘 만들어 놨습니다. 추상화, 다형성은 자바 그 자체입니다. 그래서 그렇습니다. 우리는 그냥 고마운 마음을 느끼며 그걸 쓰면 됩니다.

  • 장독깨기
    4k
    2022-01-16 01:14:22 작성 2022-01-16 01:16:24 수정됨

    IoC, 제어의 역전이라고 하는데요,

    이게 언뜻 생각하면 착각하기 쉬운게,

    프로그램 로직의 흐름을 역전 시키는게 아닙니다.

    또한 단순히 디자인 패턴도 아니구요.

    그러니 모든 프레임웍에서 지원하는것도 아닙니다.

    이 관점으로 검색을 통해 자세히 알아보는게 좋겠습니다.


  • 오루빠루
    240
    2022-01-16 15:07:21
  • 로그인을 하시면 답변을 등록할 수 있습니다.