DI(의존성 주입)란?

su dong·2023년 6월 19일
0

solid 원칙을 잘 지키려면 어떻게 해야할까? -> spring을 사용하자

왜 -> spring이란 Java로 마음대로 짜도록 두는 시스템이 아님.
-> 오히려 좋아, 틀이 있어서 단순해짐.

이때 만드는 것을 강제하는 판때기 = 컨테이너
컨테이너 위에 얹어지는 블록들을 Bean이라고 함.
일종의 레고다.

DI(dependency injection)의존성 주입

a가 b를 사용한다. a가 b에 의존한다.

DI설정의 역사

1. XML을 사용한 빈 등록

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="conveniencePayService" class="com.zerobase.convpay.service.ConveniencePayService">
        <constructor-arg name="paymentInterfaceSet">
            <set>
                <ref bean="getMoneyAdapter"/>
                <ref bean="getCardAdapter"/>
            </set>
        </constructor-arg>
        <constructor-arg name="discountInterface" ref="DiscountByPayMethod"/>
    </bean>

    <bean id="getCardAdapter" class="com.zerobase.convpay.service.CardAdapter"/>
    <bean id="getMoneyAdapter" class="com.zerobase.convpay.service.MoneyAdapter"/>
    <bean id="DiscountByPayMethod" class="com.zerobase.convpay.service.DiscountByPayMethod"/>
    <bean id="DiscountByConvenience" class="com.zerobase.convpay.service.DiscountByConvenience"/>

</beans>
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
ConveniencePayService conveniencePayService = applicationContext.getBean("conveniencePayService", ConveniencePayService.class);

-> 의존성이 많아질수록 코드의 양이 너무 많아짐.

2. XML @을 사용한 빈 등록

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.zerobase.convpay"/>

</beans>
  • 빈으로 등록할 객체들에게 @Component를 붙여준다

->하지만 이럼에도 불구하고 오류 다수 발생 ;;

-> Spring4에서부터는 XML이 아닌 Java Config를 사용해서 빈 등록

3. ComponentScan을 사용한 빈 등록

@Configuration
@ComponentScan(basePackages = "com.zerobase.convpay")
public class ApplicationConfig {
}

IOC(inversion of Control)제어의 역전

사용자가 직접 클래스를 생성하지 않고, 스프링이 제어하도록 함

profile
사람들을 돕는 문제 해결사, 개발자 sudong입니다. 반갑습니다. tkddlsqkr21@gmail.com

0개의 댓글