<WIL> 10.3 ~ 10.9 / 주특기 입문, DI, IoC, Bean
주특기 입문
스프링 주특기 입문 주차였다. 저번주 금요일 시작으로 s.a제출을 하고나서 학습자료를 토대로 학습하였다. 개인과제는 "스프링 부트로 로그인 기능이 없는 나만의 항해 블로그 백앤드 서버 만들기"
Spring Boot를 기반으로 CRUD(create, Read, Update, Delete) 기능이 포함퇸 REST API를 만들수 있다.
개인과제 git hub : KimByeungHyun/Post (github.com)
GitHub - KimByeungHyun/Post
Contribute to KimByeungHyun/Post development by creating an account on GitHub.
github.com
팀과제 notion : [6조]주특기 주차 팀 노션(Spring) (notion.site)
[6조]주특기 주차 팀 노션(Spring)
JPA 가 무엇인가요?
teamsparta.notion.site
DI
Dependenct Injection , 의존성 주입
객체들간의 관계를 관리 할 때 사용하는 기법이다. 자바에서는 일반적으로 인터페이스를 잉해서 의존적인 객체의 관계를 최대한 유연하게 처리 할 수 있고록 한다.
의존성 주입은 말그대로 의존적인 객체를 직접 생성하거나 제어 하는 것이 아니라. 특정 객체에 필요한 객체를 외부에서 결정해서 연결 시키는 것을 의미한다. 즉, 우리는 클래스의 기능을 추상적으로 묶어둔 인터페이스를 갖다 쓰면 되는 것이다.
나머지는 스프링에서 객체를 주입해주기 때문이다. 따라서 이러한 의존성 주입으로 인해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
의존성 주입 방식
- 스프링 프레임 워크(Spring Gamework)에서 DI 방식은 3가지 종류가 있습니다.
1. 필드 주입(Field Injection) 방식
Field Injection 방식은 가장 간단한 방법으로 Bean으로 등록된 객체를 사용하고자 하는 클래스에 Filed로 선언한 뒤 @Autowired 어노테이션 키워드를 붙여주면 자동으로 주입됩니다.
2 . 세터 주입(Setter Injection) 방식
Setter Injection 방식은 setter 메소드에 @Autowired를 붙여서 객체를 주입하는 방식입니다.
3. 생성자 주입(Constructor Injection) 방식
Constructor Injection 방식은 Spring 4.x 버전 이상부터 권장되고 있는 방법이며, 기존 Field Injection 방식의 단점을 극복해낸 패턴이다.
IoC
IoC를 네이버 영어사전에서 번역해보면 제어 반전을 뜻하고 있습니다.
IoC(제어반전)이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미합니다.
컴포넌트 의존관계 설정(Component dpendency resolurtion), 설정(Configration) 및 생명주기(LifeCycle)을 해결하기 위한 디자인 패턴(Design Pattern)입니다.
IoC 컨테이너
컨테이너 ? - 컨테이너는 보통 객체의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것.
스프링 프레임워크도 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너가 있는데, 그것이 바로 IoC 컨테이너 ( = 스프링 컨테이너) 입니다.
Been
'빈' : 스프링이 관리하는 객체
스프링 빈 등록 방법
1. @Component
-클래스 선언 위에 설정
@Component
public class ProductService { ... }
스프링 서버가 뜰때 스프링 IoC에 '빈' 저장
- @Component 클래스에 대해서 스프링이 해주는 일
// 1) ProdictService 객체 생성
ProductService poroductService = new ProductService();
// 2) 스프링 IoC 컨터이네에 빈( productSercie) 저장
// productervice -> 스피링 IoC 컨테이너
스프링 '빈' 이름 : 클래스의 앞글자만 소문자로 변경
- public class Product Service -> productService
'빈' 아이콘 확인 --> 스프링 IoC에서 관리할 '빈' 클래스라는 표시
- @Component 적용조건
- @ComponentScan 에 설정해준 package 위치와 하위 packages들
@Configuration
@ComponentScan(basePackafes = "com.sparta.springcore")
class BeanConfig { ... }
2. @Bean
직접 객체를 생성하여 빈으로 등록요청
스프링 서버가 뜰 때 스프링 IoC에 '빈' 저장
스프링 '빈' 이름 @Bean이 설정된 함수명
public ProductRepository productRepository() {..} --> productRepository
'빈' 아이콘 확인 --> 스프링 IoC에 '빈'에 등록 될 것이라는 표시
스프링 '빈' 사용방법
@Autowired
- 멤버변수 선언 위에 @AutoWired --> 스프링에 의해 DI(의존성 주입)됨.
- '빈'을 사용할 함수 위에 @Autowired --> 스프링에 의해 DI됨.
@Autowired 적용 조건
- 스프링 IoC 컨테이너에 의해 관리되는 클래스에서만 가능
@Autowired 생략 조건
- spring 4.3버전부터 @Autowired 생략 가능
- 생성자 선언이 1개 일 때 만 생략가능
- 파라미터가 다른 생성자들
참고 : 03-2 DI(Dependency Injection), IOC(Inversion of Control) (tistory.com)
03-2 DI(Dependency Injection), IOC(Inversion of Control)
DI (의존성 주입)의 이해 👉 "제어의 역전 (IoC: Inversion of Control)" 프로그램의 제어 흐름이 뒤바뀜 일반적: 사용자가 자신이 필요한 객체를 생성해서 사용 IoC (제어의 역전) 용도에 맞게 필요한 객
forestar.tistory.com
명품블로그입니다/ 참고하세요