스프링에서는 IoC와 DI가 전부라는 말을 들었다.
도데체 IoC와 DI가 얼마나 중요하길래 그럴까 라는 생각을 했다.
1. DI (Dependency Injection)
DI는 "의존성" 주입이다.
예를 들어 A는 B에 의존한다라는 말은 A는 B의 상황에 따라 바뀔수도 있다라는 말로 될수도 있다.
의존하기 때문에 B가 바뀌면 A에게도 변화가 올 수 있다는 것이다.
class A{
public B makeB(){
B b = new B();
return b;
}
}
코드로 본다면 위와 같은 예시가 있다.
A클래스 안에서 b라는 객체를 만들었다.
그런데 갑자기 B라는 클래스에서 생성자를 수정하여 매개변수가 필요하다면 컴파일 오류가 난다.
이와 같이 B의 상황이 바뀌면서 A까지 영향을 미치는 상황이 의존한다 라고 표현할 수 있다.
class A{
public B makeB(B b){
return b;
}
}
위 코드를 보면 이미 생성된 객체 b가 매개변수로 주어진다.
이는 A클래스 밖에서 b라는 객체를 생성하여 넣어준 것이다.
위에서 A클래스 안에서 b를 만든것과 b를 매개변수로 받은것 둘다 A는 B에 의존한다라고 말할 수 있다.
B클래스를 변경하여 b객체가 달라진다면 둘다 영향을 미치기 때문이다.
하지만 여기서는 B클래스의 생성자를 수정하여도 A클래스 내부에서는 컴파일 오류가 발생하지 않는다.
두 코드는 의존 대상을 직접 생성하는 것과 외부에서 의존대상을 생성하여 주입 받는다는 차이가 있다.
이처럼 밖에서 의존대상을 만들어 주입하는 것을 의존성 주입이라고 한다.
2. IoC (Inversion of Control)
IoC는 제어 역전이라고 한다.
먼저 스프링은 프레임워크 라고 다들 부른다.
왜 스프링은 프레임워크일까?
프레임워크는 프레임 + 워크 두개의 단어로 분리할 수 있다.
즉 프레임이 일을한다.
프레임은 일을 하기 위해 우리들에게 많은 것을 제공해준다.
메소드, 어노테이션 등등 우리는 이를 활용하여 코드를 작성한다.
그 코드를 프레임워크가 작동시켜준다.
결론적으로 주어진 프레임 안에서 주어진 도구를 가지고 프로그래밍을 하면 된다.
나는 위와 같이 프레임워크를 이해했다.
그럼 제어 역전이란 무엇인가..
제어 하는 대상이 역전된 것이다.
예를 들면 내가 직접 객체를 생성하며 객체를 관리해야 하지만 스프링은 객체를 대신 생성해주고 관리해준다.
즉 객체를 제어하는 주체가 바뀌었다.
이를 제어 역전이라고 한다.
'개발 > Spring Boot' 카테고리의 다른 글
[Spring Boot] 어노테이션 정리 (0) | 2023.05.17 |
---|---|
[Spring Boot] Setter vs Constructor vs Builder (0) | 2023.05.16 |
[Spring Boot] Controller, Service, Repository (0) | 2023.05.16 |
[Spring Boot] DTO vs VO vs Entity (0) | 2023.05.14 |
[Spring Boot] mysql 연결 삽질기 (0) | 2023.04.16 |