TIL-06/14

choichoichoi·2023년 6월 14일
0

내일배움캠프

목록 보기
24/36

내일배움캠프 5주 3일차

IoC(제어의 역전)

  • 설계 원칙
  • 클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출이 아닌, 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출 구조. 스프링에서는 모든 의존성 객체를 스프링이 실행될때 만들어주고 필요한 곳에 주입해줌

DI(의존성 주입)

  • 디자인 패턴
  • 어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는게 아니라 객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식. 사용하는 주체(A)가 사용하려는 객체(B)를 직접 생성하는 경우 의존성(변경사항이 있는 경우 서로에게 영향을 많이 준다)이 높아진다. 하지만, 외부(Spring)에서 직접 생성하여 관리하는 경우에는 A와 B의 의존성이 줄어든다.
  • 생성자에만 주입하면 객체의 불변성 을 지켜줄 수 있음

Bean

  • spring이 관리하는 객체
    ->일반 클래스를 스프링이 관리하는 bean 객체로 등록을 하는 방법
    =>@Component를 해당 class 위에 등록하면 됨. 그렇게 하면 스프링 서버가 뛰때(run) 이 IoC Container라는 곳에 해당 class를 bean으로 만들어서 등록해줌.
    좌측에 커피콩 모양이 있으면 해당 클래스가 빈으로 등록되어 스프링프레임워크로 관리되고있음을 알 수 있다.(커피콩 모양을 누르고 select in spring view를 누르면 빈으로 등록된 목록들을 볼 수 있다.)

->bean으로 등록이 되면 알아서 주입이 되는가?...NO!
사실은 주입하는 생성자나 메서드 혹은 필드에 @Autowired을 달아야 하지만
spring 4.3버전 이후부터는 Autowired가 생략이 가능해졌다. 단, 생성자 선언이 한 개일때만!! 콩 모양 누르면 어떤 것이 주입되고 있는지 바로 이동되어 확인할 수 있음.
@Autowried 적용 조건
IoC Container에 의해서 관리되는 Bean class에서만 가능하다.

IoC Container

  • 관리되고 있는 객체들이 모여져있는 컨테이너

@Component

  • Component Scan이라는 Annotation이 존재하는데 Component를 찾아주는 annotation이다. Component Scan이 설정 되어있는 패키지 위치와 그 하위 패키지들을 전부 확인한다. 그런 다음에 @Component이 설정돼있는 클래스들을 전부 찾아서 bean으로 등로 해줌.
    ->스프린 부트의 장점! 기본적인 설정들을 다 디폴트로 잡아줌.
    @Autowried 적용 조건
    IoC Container에 의해서 관리되는 Bean class에서만 가능하다.

정리!

springFramework가 주입이 되는 객체들, class들을 bean객체로 @Component 달면 bean객체로 등록해서 가지고 있다가 의존성 주입이 필요할 때 주입해 준다.

그 방법은 @Autowired에 달아서 알려준다.

주입 방법은 총 3가지로 필드 주입, 생성자 주입, 메소드 주입이 있는데 생성자 주입을 가장 추천한다. 생성자 주입을 했을 때 객체의 불변성을 지켜 줄 수 있기 때문이다.

생성자가 하나만 있을 때 @Autowired가 생략이 가능하다.

참고
https://melonicedlatte.com/2021/07/11/174700.html

0개의 댓글