항해99

항해 3주차 WIL (DI, IoC, Bean)

숲별 2022. 10. 9. 21:47
728x90

2주 연속 갓재영 매니저님 당첨이라 넘나 다행.

지난 과제할 때 코드들이 잘 이해가 안가서 답답했었는데 매니저님이랑 1대1로 코드보다 보니까

좀 많이 해소된 것 같아서 좋았다. 아직 개념들이 좀 꼬여있긴 하지만 차차 나아지겠지.

다음주는 갓재랑 안될지도 모르니까 이번주 열심히 공부해서 최대한 많이 배워야겠다.

황석준 매니저님도 괜찮아 보여서 사실 매일 매니저님이 오시는 걷기반이기만 하면 될 것 같긴 하지만,

다음주 팀 프로젝트 하나 하는 것 같은데 걷기반 달리기반 나눠질지 잘 모르겠다.

 

이번주 가장 힘들었던 건 용어. 쏟아지는 생소한 용어들이 제일 답답했다.

그 단어가 궁금해서 찾아보면 또 모르는 단어 때문에 이해가 안되고ㅋㅋㅋ

모르는 단어가 꼬리에 꼬리를 물었다.

누가 용어정리 단계별로 차근차근 쉽게 좀 해줬으면 좋겠다...ㅜ

 

그리고 아직 코드가 안 익숙한 것도 좀 걸림돌인 것 같다.

혼공자로 언어 스터디하면서 느낀 건데 이게 책 내용은 이해가 가는데

아직까지 내가 본 자바, 스프링 코드는 끽해야 알고리즘 문제 몇 개와 지난 주 과제하면서 만들었던 코드 하나 밖에 없으니까 대체 이 개념을 왜 쓰는지, 어디에 필요한지가 잘 와닿지 않았다.

코드도 아직 혼자서 아무것도 안보고 쓰기엔 실력이 모자른 것 같다.

갈 길이 멀구나..

 

아직까진 개인과제 뿐이라서 내가 부족해도 내가 책임지면 되는데

팀과제에 들어가면 민폐일 것 같아서 적어도 1인분은 할 수 있게 빨리 잘 하게 됐으면 좋겠다..!

 

 

이번주 키워드 :DI, IoC, Bean

 

Inversion of Control 이라고도 하는 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법이다. (new 연산자를 이용해서 객체를 생성하는 것이라고 생각하면 된다

 

Inversion of Control (IoC)(제어 주체가 어플리케이션)가 담당하는 객체를 Bean이라고 한다.

일반적 객체는 사용자가 관리하여 생성 및 소멸을 제어가 가능하지만 @Component와 @Bean으로 IOC에게 관리주체를 넘기게 되면 소멸을 사용자가 할 수 없고 프로그램이 종료시에 소멸되게끔 IOC가 관리한다.

Bean을 등록하는 방법

  • xml에 등록하는 방법 (Maven 일 때 / 최근에는 잘 사용하지 않음)
  • @Bean 어노테이션을 이용하는 방법
  • @Component 어노테이션을 이용하는 방법

 

 

---------------------

의존성 주입을 사용하는 이유

1. 재사용성을 높여준다.

2. 테스트에 용이하다.

3. 코드를 단순화 시켜준다.

4. 사용하는 이유를 파악하기 수월하고 코드가 읽기 쉬워지는 점이 있다.

5. 종속성이 감소하기 때문에 변경에 민감하지 않다.

6. 결합도(coupling)는 낮추면서 유연성과 확장성은 향상 시킬 수 있다.

7. 객체간의 의존관계를 설정할 수 있다.

 

 

빈(Bean)이란 무엇인가?

  • 스프링 IoC 컨테이너가 관리하는 객체
    • 빈으로 등록됐을 때의 장점
      • 스프링 IoC 컨테이너에 등록된 Bean들은 의존성 관리가 수월해진다. 
      • 스프링 IoC 컨테이너에 등록된 Bean들은 싱글톤의 형태이다

 

singleton : 기본(Default) 싱글톤 스코프. 하나의 Bean 정의에 대해서 Container 내에 단 하나의 객체만 존재한다.
prototype : 어플리케이션에서 요청시 (getBean()) 마다 스프링이 새 인스턴스를 생성

 

이러한 장점들 때문에 우리가 직접 Inversion of Control의 코드를 작성해서 사용하는 것이 아니라 스프링의 IoC 컨테이너를 사용하는 것이다. 

 

----------https://devlog-wjdrbs96.tistory.com/165

 

 

아.. 이번주 키워드를 보니까 생각 난 건데

일단 주어진 그 주 학습자료 먼저 보고 과제 제출할 것. 다른 공부 할 것을

다시 다짐하게 됐었다.

 

과제에 필요한 코드는 학습자료 4개 중에 2.5까지만 보면 할 수 있었던 지라 뒷부분을 늦게 보게 됐는데

그 뒷부분에 저 용어들이 있었어서 제출할 때 채워야하는 질문에 답변을 작성하는 게 하나하나 다 찾아보느라 무척 오래 걸렸다. 학습자료 보고 한 번 더 찾아보는 거였으면 그만큼 오래 걸리지는 않았을 것 같아서 뼈져리게 느낌..