어디서 객체를 생성해서, 이 객체를 어느시점에 호출해줘야하는걸까?
이러한 객체의 생명주기를 고민하면서 구현을 했던 개발자들에게, 객체지향적으로 개발을 할 수 있도록 틀을 제공하여 비즈니스 로직에 더 신경쓰도록 도와주는 것이 Spring이라는 프레임워크다.
즉, 스프링은 객체 지향 언어인 자바가 객체 지향적인 언어로써 구현이 될 수 있도록 틀을 제공한다.
얼마나 이러한 고뇌가 힘들었으면, 드디어 개발자에게 봄이왔다며 Spring이라 이름을 지었을까..?
그렇기 때문에, 스프링은 자바와 별개가 아니며, IoC와 DI는 객체지향적 관점에서, 스프링을 사용하는 중요한 이유가 된다.
IoC(Inversion of Control) : 제어의 역전
기존의 객체를 생성하고, 소멸하는 시점을 결정했던 개발자의 역할(제어)을 뒤바꾼다는 뜻이다.
스프링에서는, 개발자가 아닌 스프링이 객체의 생성과 소멸과 같은 제어 역할을 일부 가진다.
이로써, 개발자는 생명주기에 대해 고민하지 않고, 비즈니스 로직에만 집중할 수 있게 된다.
DI(Dependency Injection) : 의존성 주입
객체가 다른 객체를 사용할 때( 즉, 의존성을 가지고 있을 때) 스스로 객체를 생성하거나, 호출하는 것이 아니라 제어권을 가진 주체(스프링/DI/IoC 컨테이너)에게 객체를 주입받아 사용하는 것을 말한다.
IoC원칙이 있다고 하더라도, 개발자가 구현하면서 제어를 넘겨주었던, 의존성이 있는 객체를 직접 생성해버리면 이러한 제어의 역전을 지키지 않는 것이 되어버린다.
그렇기 때문에, IoC원칙을 DI라는 패턴을 구현함으로써 지켜질 수 있다고 생각한다.
IoC와 DI는 서로 뗄레야 뗄 수 없는 관계이며, 서로 왜 함께 언급이 되고 있는건지, 이번 기회에 조금 더 명확하게 알 수 있었다.
그런데, IoC에 의하면 객체를 제어하는 역할을 스프링에게 넘겨준다고 했는데 그러면 이러한 객체를 스프링은 어떻게 관리하는 걸까?! 라는 의문에서 Spring Bean, Spring Bean 의 개념이 나올 수 있을 것같다.
Spring Bean : 스프링 빈
스프링에게 제어를 넘겨준 객체 즉, 스프링이 관리하는 객체를 의미한다.
DI/IoC/Spring Container : 스프링 컨테이너
스프링 프레임워크가 스프링 빈을 관리하는 곳이다.
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] Bean관리 누가할래? in TEST (@SpringBootTest @Test 알고 쓰기) (0) | 2024.07.30 |
---|---|
[Spring] DTO는 왜 필요할까? (0) | 2024.07.22 |
[Spring] Data Binding의 3가지 방법 (0) | 2024.07.22 |
[Spring] IoC를 실현하기 위한 DI(의존 관계 주입) 방법 3가지 (0) | 2024.07.18 |
[Spring] @Component 와 @Autowired를 통해 IoC실현하기 (0) | 2024.07.17 |