사실 스프링에 대한 약간은 힘듬과 어려움은 있는 것 같다. 다만 예전에 겪었던 경험을 통해서 그나마 나은 결과를 만들 수 있었다고 생각한다. 다만 스프링에서 이해해야하는 양이 방대한 만큼 자료의 밀도도 높았으면 하는 약간의 바람은 지울 수 없다. 다음주에는 JWT를 배운다고 한다. Flask에서 해 봤지만 생각보다 어렵기 때문에 더 많은 양의 공부가 나를 기다릴 것이라는 생각이 든다. 더 열심히 성장 하고 싶다.
DI란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존관계주입기능으로, 객체를 직접생성하는 것이 아닌 외부에서 생성한 후 외부에서 주입시키는 방법을 이야기 한다. DI를 통해, 모듈 간의 결합도를 낮추고 유연성을 높힌다고 한다.
아래 사이트를 보고 이해하기 좋아 그림을 가져와 봤다.
공부한 사이트 : https://velog.io/@gillog/Spring-DIDependency-Injection
두번째 방법이 외부에서 setter()를 이용한 방법이다.
A객체에서 직접 생성하는 것이 아닌 외부에서 생성된 객체들을 주입시켜 setter 또는 생성자를 통해서 사용하는 방식이라고 생각하면 될 것 같다.
제어의 역전이라는 의미로, 말 그대로 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌, 외부에서 결정되는 것을 의미한다. [제어의 흐름을 바꾼다고 간단히 생각하면 될 것 같다. ]
객체의 의존성을 역전시켜, 객체간의 결합도를 줄이고 유연한 코드를 작성하여, 가독성 및 코드중복, 유지보수에 편의성을 줄 수 있다고 한다.
객체 생성
의존성 객체 주입
스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.
의존성 객체 메소드 호출
스프링이 모든 의존성 객체를 스프링이 실행될때 다 만들어주고 필요한곳에 주입시켜줌으로써 Bean들은 싱글턴 패턴의 특징을 가지며,제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 스프링에게 맡겨 작업을 처리하게 된다.
스프링 IoC컨테이너가 관리하는 자바 객체를 빈이라고 한다. 제어의 역전으로 인해 객체에 권한이 스프링에 위임되어 스프링에 의해 생성되고 관리된다. Spring Framework 에서는 Spring Bean 을 얻기 위하여 ApplicationContext.getBean() 와 같은 메소드를 사용하여 Spring 에서 직접 자바 객체를 얻어서 사용한다.
도움된 사이트 : https://velog.io/@davidko/IoC-DI-Bean-%EC%9D%B4%EB%9E%80