ioc (Inversion of Control) 소개

2023. 12. 23. 18:19- 서버/springboot

Ioc란?

inversion of control을 직역 하면 반전된 컨트롤이라는 뜻입니다. 컨트롤이 바꼈다는건데 그것은 무엇을 말하는 걸까요?

 

여러 컨트롤을 말할 수 있지만 주로 의존성 합니다.

의존성에 대한 컨트롤이 뒤바뀌었다 라고 이해 하시면 되겠습니다.

 

보통 의존성에 대한 주도권은 자기 자신이 가지고 있는게 일반적 입니다. 

아래의 코드를 살펴 보겠습니다.

class OwnerController {
	// 클래스 안에서 생성해서 관리
	private OwnerRepository repository = new OwnerRepository();		
}

 

OwnerController클래스 안에서  OwnerRepository객체를 생성하여 repository 변수에 넣어줬습니다. 이변수의 주도권은 OwnerController본인이 가지고 있습니다. 

 

아래의 경우는 의존성이 바뀐 경우의 코드입니다.

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);
	}
}

 

OwnerRepository클래스를 직접 생성 하지 않고 OwnerController생성자에서 OwnerRepository클래스를 받아 대입해주었습니다. OwnerRepository의존성을 OwnerController에게 주입한것 입니다.

 

여기서 의존성은 자신에게 있는게 아니기 때문에 의존성이 뒤바뀌었다고 볼수 있습니다.

 

 

참고자료
https://www.inflearn.com/course/lecture?courseSlug=spring&unitId=15538&tab=curriculum