일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 엘라스틱서치
- 알고리즘정렬
- effectivejava
- 이차전지관련주
- 알고리즘
- 김영한
- 스프링부트
- 예제로 배우는 스프링 입문
- 클린아키텍처
- 이펙티브자바
- JavaScript
- 코딩테스트
- 카카오 면접
- 자바
- 이펙티브 자바
- 스프링
- 티스토리챌린지
- 스프링 핵심원리
- 스프링핵심원리
- ElasticSearch
- 오블완
- Effective Java
- Sort
- Spring
- Effective Java 3
- k8s
- 자바스크립트
- 카카오
- kubernetes
- java
- Today
- Total
Kim-Baek 개발자 이야기
[백기선 - 예제로 배우는 스프링 입문] 스프링 IoC 본문
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다
Inversion of Control
제어권이 뒤바꼈다고?
일반적인 (의존성에 대한) 제어권: “내가 사용할 의존성은 내가 만든다.”
class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
IoC: “내가 사용할 의존성을 누군가 알아서 주겠지”
-
내가 사용할 의존성의 타입(또는 인터페이스)만 맞으면 어떤거든 상관없다.
-
그래야 내 코드 테스트 하기도 편하지.
class OwnerController {
private OwnerRepository repo;
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
// repo를 사용합니다.
}
class OwnerControllerTest {
@Test
public void create() {
OwnerRepository repo = new OwnerRepository();
OwnerController controller = new OwnerController(repo);
}
}
참고
Inversion of Control Containers and the Dependency Injection pattern
Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.
martinfowler.com
IoC (Inversion of Control) 컨테이너
ApplicationContext (BeanFactory)
빈(bean)을 만들고 엮어주며 제공해준다.빈 설정
-
이름 또는 ID
-
타입
-
스코프
아이러니하게도 컨테이너를 직접 쓸 일은 많지 않다.
참고
빈 (Bean)
스프링 IoC 컨테이너가 관리하는 객체
어떻게 등록하지?
-
Component Scanning
-
@Component
-
@Repository
-
@Service
-
@Controller
-
@Configuration
-
또는 직접 일일히 XML이나 자바 설정 파일에 등록
- @Configuration 안에서 @Bean 으로 등록한다
어떻게 꺼내쓰지?
-
@Autowired 또는 @Inject
-
또는 ApplicationContext에서 getBean()으로 직접 꺼내거나
특징
-
오로지 “빈"들만 의존성 주입을 해줍니다.
의존성 주입 (Dependency Injection)
필요한 의존성을 어떻게 받아올 것인가..
@Autowired / @Inject를 어디에 붙일까?
- 생성자
- 파라미터로 받는 빈이 없으면 객체가 안만들어지는 것을 보장하기 때문에 더 좋다
- final 키워드가 사용가능하여, 레퍼런스가 변경되지 않는다.
- 필드나 setter는 객체가 만들어지고, 빈을 만드는데 final로 되어있는 경우 변경이 안되기 때문에 만들 수가 없다
- 필드
- Setter
'개발 > Spring' 카테고리의 다른 글
[백기선 - 예제로 배우는 스프링 입문] 스프링PSA (0) | 2020.09.20 |
---|---|
[백기선 - 예제로 배우는 스프링 입문] 스프링 AOP (0) | 2020.09.20 |
[백기선 - 예제로 배우는 스프링 입문] 프로젝트 살펴보기 ( Pet Clinic ) (0) | 2020.09.20 |
[카카오 면접] 스프링의 예외 처리 (0) | 2020.09.19 |
[카카오 면접] 스프링부트 환경 설정 (0) | 2020.09.19 |