티스토리 뷰

728x90
반응형

사전 정보

java 21.0.4 2024-07-16 LTSJava(TM) SE Runtime Environment (build 21.0.4+8-LTS-274)

Java HotSpot(TM) 64-Bit Server VM (build 21.0.4+8-LTS-274, mixed mode, sharing)

 

Tomcatv 10.1

EclipseVersion: 2024-06 (4.32.0)Build id: 20240606-1231


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

제어의 역전(IoC, Inversion of Control)은 객체의 생성과 의존성 관리를 개발자가 아닌

프레임워크컨테이너가 담당하도록 하는 소프트웨어 설계 원칙입니다.

 

제어의 역전(IoC, inversion of Control) 장점

유연성 증가: 객체 간의 결합도가 낮아져, 코드의 수정과 확장이 용이합니다.
테스트 용이성: 의존성을 외부에서 주입받기 때문에, 모의 객체(mock)를 주입하여 단위 테스트를 쉽게 수행할 수 있습니다.
재사용성 증가: 객체의 생성 및 의존성 관리가 분리되어, 객체를 더 다양한 상황에서 재사용할 수 있습니다.


의존성 주입(DI, Dependency Injection)

의존성 주입(DI, Dependency Injection)은 IoC의 가장 일반적인 구현 방법입니다.

객체의 의존성을 외부에서 주입받는 방식으로, 생성자 주입, 세터 주입, 필드 주입 등의 형태가 있습니다.


의존성 주입(DI, Dependency Injection) 구현

1. 생성자 주입

<bean id="memberController" class="com.mvc.controller.MemberController">
	<constructor-arg name="memberDAO" ref="memberDAOImp" />
</bean>
@Controller
public class MemberController {
	private final MemberDAO memberDAO;

	public MemberController(MemberDAO memberDAO) {
		this.memberDAO = memberDAO;
	}
}

 

2.세터 주입

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521/xe" />
    <property name="username" value="system" />
    <property name="password" value="1234" />
</bean>
    
<bean id="memberDAOImp" class="com.mvc.member.MemberDAOImp">
	<property name="dataSource" ref="dataSource" />
</bean>
public class MemberDAOImp implements MemberDAO {
	private DataSource dataSource;

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}
}

// property name="dataSource" 라고 한다면  세터 함수명은 "set" + property name 이어야한다.
// 예) setDataSource

 

3. 필드 주입

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521/xe" />
    <property name="username" value="system" />
    <property name="password" value="1234" />
</bean>
    
<bean id="memberDAOImp" class="com.mvc.member.MemberDAOImp">
	<property name="dataSource" ref="dataSource" />
</bean>
@Controller
public class MemberController {
	@Autowired
	private MemberDAOImp memberDAOImp;
}

// @Autowired는 기본적으로 타입을 기준으로 의존성을 주입합니다.
// 주입할 빈의 타입이 정확히 일치하면 해당 빈이 자동으로 주입됩니다.
// 같은 타입의 빈이 여러 개 존재할 경우, 주입할 빈을 명시적으로 지정해야 합니다.
728x90
반응형