반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 카카오 면접
- Effective Java
- 스프링
- java
- 자바스크립트
- 자바
- 이차전지관련주
- 티스토리챌린지
- k8s
- 클린아키텍처
- effectivejava
- ElasticSearch
- Spring
- 김영한
- 예제로 배우는 스프링 입문
- 카카오
- JavaScript
- 오블완
- 코딩테스트
- 이펙티브 자바
- 스프링핵심원리
- 스프링부트
- 알고리즘
- 스프링 핵심원리
- Effective Java 3
- Sort
- 알고리즘정렬
- 이펙티브자바
- 엘라스틱서치
- kubernetes
Archives
- 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);
}
}
참고
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 |
Comments