DI, IoC, Bean

Lee1231234·2022년 8월 21일
0

DI

의존성 주입(Dependency Injection)
스프링 프레임워크의 핵심 프로그래밍 모델중 하나.
클래스 레벨에서 인터페이스를 클라시 사이에 둬서 두 클래스의 의존관계가 고정되지 않도록하고 런타임시에 동적으로 주입. 유연성을 확보하고 결합성을 낮추는 방법이다.

예를 들어서 비슷한 두 클래스를 상속 받았다면..

class AAA extends CCC {...}
class BBB extends CCC {...}


class ABC {
    private CCC ccc;

    public ABC() {
    	this.ccc = new AAA(); 
        // 또는 
        this.ccc = new BBB(); 
    }
    
   
}

와 같이 형성되며 두 클래스 AAA,BBB를 직접 수정해야합니다.

이것을 의존성 주입을 사용한다면.

class ABC {
    private CCC ccc;

  
    public ABC(CCC ccc) {
    	this.CCC = ccc;
    }
    //필요한 무언가.
    public ABC_abc() {
    	
    }
}

직접 클래스를 생성하지않고 주입하여 객체간의 결합도를 줄일수 있다.

즉 DI는 강하게 결합된 클래스를 분리. 실행 시점에 객체간 관계를 결정하여 결합도를 낮추는 것을 목표로 한다.

IoC

제어의 역전(Inversion of Control, IoC)

제어의 역전이란 오브젝트 전반에 걸친 제어권을 개발자가 아닌 프레임워크 컨테이너에게 넘기는 개념. 스프링에서는 Bean의 형태를 가지고있다.
의존성 주입(DI)가 IoC의 일종이다.

즉 개발자가 객체를 생성,의존성을 주입하는것이 아니라 스프링 컨테이너에서 객체의 생명주기를 관리한다. 이러한 현상을 IOC, 제어의 역전이라고한다.

Bean

빈?
자바 프로그래밍에서는 Class 생성후 new로 객체를 생성해서 사용.
스프링에서는 직접 new 키워드를 이용해 객체를 생성하지않고 스프링에 의하여 관리하는 자바객체를 사용 이것을 Bean이라고 부름

스프링에서는 크게 두가지 방식이 있음
1. Component Scan을 통한 등록
어노테이션

@CompoentScan
code...

보통 메인 함수 위에서 사용하며
다른 어노테이션들(@Componet @Service와 같은)이 부여된 Class를 자동으로 스캔하여 등록한다.
2. 빈 설정파일에 직접 등록
@Configuration 및 @Bean을 사용하여 직접 등록함

@Configuration
public Config config(){} //이러면 빈 객체가 됨.

@Bean
public Bean bean(){} //이러면 빈 객체가 됨.
profile
not null

0개의 댓글