240516
오늘의 학습
● 1. 스프링 DI / IoC
● 2. ComponentScan / Component
● 3. Autowired
1. DI( Dependency Injection ) - 디자인 패턴
DI는 객체지향의 디자인 패턴 중 하나이다.
Dependency Injection는 "의존성 주입" 이라는 뜻을 가지고 있다.
1. 의존성 이란?
클래스 내부에서 다른 클래스를 생성하면서 이용하는 것을 의존성 이라고 한다.
2. 의존성 주입 이란?
클래스 내부에서 다른 클래스를 생성하는 것이 아닌 만들어 놓은 객체를 받는 필드 같은 곳에 선언만해둔뒤 생성자나 메서드, 필드 등등을 활용하여 외부에서 객체를 생성해서 넣어주는 것을 의존성 주입이라 한다.
2. IoC( Inversion of Control ) - 설계 원칙
DI(디자인 패턴)을 사용하여 IoC설계 원칙을 구현하고 있다.
Inversion of Control는 "제어의 역전" 이라는 뜻을 가지고 있다.
제어의 역전이란 말그대로 객체의 대한 관리를 즉, 제어를 외부에 맡기는 것을 의미한다.
의존성 주입을 통해 외부에서 객체를 생성해서 넣어주는 것이 IoC의 설계 원칙을 구현하고 있다고 생각하면 된다.
그러므로 IoC 즉, 제어의 역전이라고 할 수 있다. ( 제어를 외부에 맡기는 것 ! )
3. Bean
Spring이 관리하는 객체를 뜻한다.
4. IoC 컨테이너
Spring의 IoC컨테이너를 의미하며 Bean들을 모아둔 하나의 컨테이너 이다.
즉, DI(의존성 주입)을 Spring이 Bean들을 통해서 대신 해주는 것이다.
이러한 Bean들은 컨테이너에 모아져 있다.
5. @ComponentScan & @Component
1. @Component
@Component애노테이션을 클래스 위에 붙히면 Spring Server가 실행될 때 IoC컨테이너라는 곳에 해당 클래스를
Bean으로 만들어서 등록을 해주게 된다.
2. @ComponentScan
@ComponentScan을 통해 @Component을 스캔 즉, 찾아주는 역할을 하게 된다.
ComponentScan은 해당 패키지 위치와 하위 패키지들을 전부다 확인을 하고, 그 중에서 Component가 붙은 클래스들을
전부다 찾아서 Bean으로 등록을 해주는 것이다.
( 참고로 스프링이 실행될 때 찾아서 등록을 해주는 것이다. 즉, 런타임 상황에서 일어나는 일이다. )
6. @Autowired
@Autowired는 스프링에서 제공해주는 애노테이션이다. Bean등록이 되어있는 클래스들을 자동으로 의존성을 주입해주는
그런 애노테이션이다.
자동으로 의존성을 주입해준다? 예제를 통해 알아보자.
@RestController
public class Main(
private final MemberService memberService;
@Autowired
public Main(MemberService memberService) {
this.memberService = memberService;
}
);
코드 예시를 보면 필드로 MemberService객체 타입으로 객체를 받을 수 있는 필드를 선언 해두었다.
그리고 생성자를 통해 필드로 객체를 넣어주고 있는 상황이다. 이러한 상황에서 필드의 멤버변수를 사용하려면
멤버변수안에 객체가 들어가있어야 한다. 즉, Main생성자를 다른 클래스에서 new로 생성해서 MemberService라는
객체를 매개변수로 넣어줘야지 memberService를 사용할 수 있다는 말이다.
외부에서 객체를 넣어주는 것을 "의존성 주입"이라고 한다. 즉, DI이다.
그런데 스프링에서는 외부에서 객체를 생성해서 넣어주는 이러한 과정을 자동으로 스프링이 넣어준다.
대신 조건이 붙게된다. 넣어주는 객체 즉, 클래스는 Bean으로 등록이 되어있어야 하며, 넣을때는 Autowired 애너테이션을
통해 자동으로 의존성을 주입하겠다는 명시를 해줘야 한다.
클래스들의 Bean등록은 여러가지 방법이 존재하지만 그 중 한가지 방법이
위에서 설명한 ComponentScan & Component방식이다.
# 오늘의 회고
오늘은 스프링의 2주차 강의를 수강 완료 했고 2주차 숙제를 끝낸 상황이다.
스프링 나가고 나서부터는 TIL에 코드는 별로 없고 이론만 가득한 것 같다...
지금은 JPA와 스프링 기초를 끝낸 상태이며 개인 과제를 하느라 바쁜 상황이다.
오늘은 20000
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 23일차 TIL - JVM (0) | 2024.05.20 |
---|---|
내일배움캠프 22일차 TIL - Annotation (0) | 2024.05.19 |
내일배움캠프 20일차 TIL - Spring(API) (0) | 2024.05.13 |
내일배움캠프 19일차 TIL - Iterator (0) | 2024.05.12 |
내일배움캠프 18일차 TIL - 람다(메서드 참조, 생성자 참조) (0) | 2024.05.10 |