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 |
Tags
- 재밌게 할래요
- 프로그래머스
- 알고리즘
- 삼성 SW 역량 테스트 기출 문제
- 블록
- 점프 점프
- C++
- 논블록
- 어싱크
- 10505
- BOJ
- 자료구조
- SWEA
- 레퍼럴
- 리퍼럴
- spring
- Initiative Q
- 메타퀘스트3
- 11060
- 백준
- 디자인패턴
- level2
- d4
- Java
- D2
- SOLID
- 이니셔티브 q
- D3
- Design Pattern
- Meta Quest3
Archives
- Today
- Total
아직은 정체성이 없는 블로그
[Spring][IoC] IoC(Inversion of Control) 제어의 역전 본문
IoC의 개념
IoC는 Inversion of Control의 약자 말그대로 제어의 역전이다.
제어의 역전이라을 간단히 말하자면 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명할 수 있다.
일반적인 제어 흐름(IOC X)
일반적으로 프로그램의 흐름은 main() 메소드와 같이 프로그램이 시작되는 지접에서 다음에 사용할 오브젝트를 결정하고, 결정한 오브젝트를 생성하고, 만들어진 오브젝트에 있는 메소드를 호출하고, 그 오브젝트 안에서 다음에 사용할 것을 결정하고 호출하는 식의 작업이 반복된다.
모든 오브젝트들이 능동적으로 자신이 사용할 클래스를 결정하고, 언제 어떻게 그 오브젝트를 만들지를 스스로 관장한다. 즉 모든 종류의 작업을 사용하는 쪽에서 제어를 하는 구조라고 말할 수 있다.
/*
일반적인 제어권: 자기가 사용할 의존성은 자기가 만들어서 사용
*/
public class PetOwner{
private AnimalType animal;
public PetOwner() {
this.animal = new Dog();
}
}
위의 코드는 PetOwner 클래스에서 Dog이라는 사용할 클래스를 직접 정한다.
제어가 역전된 흐름
제어의 역전이란 위와 같은 제어 흐름의 개념을 거꾸로 뒤집는 것이라고 말할 수 있다.
제어의 역전에서는 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않고 생성하지 않는다.
또한 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 때문에 자신도 어떻게 만들어지고 어디서 사용되는지를 알 수 없다.
/*
Inversion Of Control
다른 누군가가 의존성을 밖에서 준다.(제어권의 역전)
의존성을 주입해주는 일:Dependency Injection(일종의 IOC)
*/
public class PetOwner {
public AnimalType animal;
public PetOwner(AninalType animal) {
this.animal = animal;
}
}
위의 코드는 PetOwner의 AnimalType을 자신이 정하는 것이 아니라 외부에서 정하게 된다.
'Spring' 카테고리의 다른 글
[Spring] @Controller와 @RestController의 차이 (0) | 2020.07.20 |
---|---|
[Spring][Spring boot] @SpringBootApplication 이란? (0) | 2020.07.09 |
[Spring] Spring boot 프로젝트의 구조 (0) | 2020.06.12 |
[Spring][Java] DAO (Data Access Object) (0) | 2020.05.19 |
Comments