[Spirng] Ioc와 Bean 그리고 DI

방패맨·2023년 11월 29일
post-thumbnail

1.IoC와 bean

기본적으로 스프링은 제어의 역전 특징이 있다.
제어의 역전 (IoC)는 객체에 대한 권한을 프레임워크가 가지고 있으며 객체 생명주기를 프레임워크가 제어한다. 그래서 제어의 역전이라함.
따라서 스프링이 직접 관리 하기 위해 객체를 등록해줘야하는데 이것이 bean이다. 실제로 @bean 어노테이션을 사용해서 등록한다. @controller, @service, @repository 등 이러한 어노테이션들은 component로 간주하여 빈으로 등록된다. 이와 관련하여 빈을 생성하고 의존관계를 설정하는 기능을 담당하는 IoC 컨테이너이자 클래스인 beanfactory가 존재하며 추후에 이와 관련하여 scope, singletonprototype 등에 관하여 다룰 예정이다.

2.DI (Dependency Injection)

의존성 주입이라 하는 DI (Dependency Injection)객체의 의존관계를 외부에서 넣어주는 것을 뜻한다.
다시 1번을 보자. 스프링은 IOC특징이 있으며 빈을 등록해서 객체를 관리한다. 그 빈들을 스프링 컨테이너 에 담아 bean들을 관리하는데, 여기서 스프링 컨테이너에서 각 빈들에 대한 관계를 정리해줘야 하지않겠는가. 예를 들어 학용품이라는 객체와 연필이라는 객체를 빈으로 등록했으면 필요에 의해 둘을 사용할때 둘의 관계를 알아야 프레임워크가 관리할텐데 그때 필요한 것이 DI이다. 프레임워크가 객체를 관리(IOC)하고, 실행시 객체 간의 관계를 결정(DI)함 으로써 객체들간의 결합도를 낮추는 장점이 있다.

3.@Autowired

DI에 대한 개념을 이해했으니 어떻게 의존성을 주입하는가? 대표적으로 @Autowired 어노테이션을 사용하는 것이다. 특정 클래스에서 필요한 객체를 다룰 때 @Autowirded 를 사용하면 스프링 컨테이너에서 빈으로 등록한 객체의 의존성 주입을 알아서 넣어준다.

@Service
public class ShieldRepairServiceImpl implements ShieldRepairService {

 @Autowired
 private HammerRepository hammerRepository;//@Repository를 사용하여 빈으로 등록한 레포지토리

4.@RequiredArgsConstructor

@Autowired에 대해 알아봤으니 @RequiredArgsConstructor에 대해 추가적으로 알아보자.
간단하게 의존성 주입 종류(생성자,setter,field)중에 생성자 주입을 자동으로 해준다. 즉 생성자를 만들고 @Autowired를 사용하여 의존성을 주입후, 필드가 새로 생길 떄 마다 생성자를 수정하는 번거로움이 없어지고 자동으로 관리해준다.

profile
개발자 방패맨의 기술블로그

0개의 댓글