
Today I Learn ✍🏼
- 오늘 하루 가장 인상 깊었던 배움에는 뭐가 있었지?
강의를 들으면서 bean 등록 이야기가 나왔다. 면접 스터디에서도 정확하게 DI에 대해 설명하지 못했다. 무한루프 단톡방에서 IoC에 등록된 빈에 대한 질문이 있었다. 그러나 나는 알지 못했기에 이번에 정리를 했다.
- 그 배움까지 다가가는데 어떤 어려움이 있었지?
지금까지 스프링 강의는 엄청나게 많이 들었다. DI, IoC도 여러번 공부했다. 그러나 오늘이 유튜브 5분 요약으로 인해 정말 쉽게 이해하게 되었다.
- 그 어려움을 해결하기 위한 나의 시도들은 무엇이 있었지?
개발 공부할 때마다 DI, IoC 공부를 했다.
- 그 과정에서 나는 무엇을 깨달았고, 어떤 감정/생각이 들었었지?
개발은 기본을 알아야 한다. 기본을 알면 모든게 어떻게 돌아가는지 세상이 보이게 된다.
- 이 상태에서 이후 더 나은 내가 되려면 무엇을 보완하지?
기술 CS 면접 스터디는 꾸준히 해야겠다. 질문을 받았을 때 '답변을 하지 못한다 == 모른다'
의존성 주입이란?
Dependency Injection
ioc컨테이너 == 매개체
모든 모듈을 등록한다.
사용처에서 직접 생성하는 것이 아니라
필요할때 ioc 컨테이너가
의존성이 있는 모듈을 주입해주는 방식
개발자가 컨트롤하지 않고 ioc 컨테이너를 담당하는 프레임워크가 컨트롤을 하니
제어의 역전 현상이 발생한다.
'의존한다' 뜻 무엇인가?

클래스A는 B에 의존한다.
클래스A 코드에는 B를 의존하는 코드가 있다.
클래스A 는 직접 클래스B를 생성해서 쓰는 것이 아니라, 외부에서 클래스B를 생성해서 주입해준다.
제어의 역전
Inversion of Control

기존에는 의존성을 개발자가 직접 컨트롤 했다.
ioc가 발생하면 의존성이 역전되어 있기 때문에 == 개발자가 직접 의존성을 제어하지 않는다.
클래스A가 클래스B를 직접 생성, 참조함
중간에 매개체를 두고
개발자가 직접 의존성을 제어하던 것을
매개체에게 제어권을 빼앗겨서 더 이상 개발자가 제어의 주체가 아니다.
이 매개체가 ioc 컨테이너이다.
IOC 컨테이너?
의존성 관리
인스턴스를 생성 후 주입
메모리를 해제
프레임워크가 담당한다.
DI는 어떻게 하는가?
이렇게 new로 생성하지 않고
생성자, 어노테이션 처럼 도구를 사용한다.

DI 장점
1. 의존성이 줄어든다
사용하는 클래스에서 직접 생성하는 것이 아니라, ioc 컨테이너를 통해서 사용하기 때문이다.
2. 변화에 강하다
의존하고 있는 모듈의 라이프 사이클을 전혀 신경쓰지 않기 때문에 의존하고 있는 모듈이 변경되어도 신경쓸 필요 없다.
3. 따라서 유지보수가 용이함
4. 코드 줄어듦
생성, 삭제 코드를 작성 안하기 때문에 줄어듦
5. 테스트 편함
외부에서 주입 받기 때문에, 자신이 원하는 객체 상태를 만들어서 주입하면 된다.
'학습 기록 (Learning Logs) > Today I Learned' 카테고리의 다른 글
Map 함수 (0) | 2024.08.14 |
---|---|
Redis, Spring (0) | 2024.08.07 |
Spring Security? OAuth2 ? (0) | 2024.08.06 |
MSA, Spring Cloud (0) | 2024.08.06 |
패키지 위치에 따라 다른 DB가 자동으로 연결되는 법 (0) | 2024.03.03 |