Spring/실습 정리

Spring 1강 - DI(의존성 주입) 기초 예제

코딩하는냥이 2025. 6. 12. 15:20
반응형

스프링 프레임워크의 핵심 개념 중 하나인 DI(Dependency Injection, 의존성 주입) 을 예제 중심으로 배워봅니다. 객체를 직접 생성하지 않고 설정 파일을 통해 주입받는 구조를 이해하는 것이 이번 강의의 핵심입니다.


📦 TV.java (인터페이스)

package example;

public interface TV {
	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
}

📦 samsungTV.java

package example;

public class samsungTV implements TV {
	public void powerOn() {
		System.out.println(getClass().getSimpleName() + " 전원을 켭니다.");
	}
	public void powerOff() {
		System.out.println(getClass().getSimpleName() + " 전원을 끕니다.");
	}
	public void volumeUp() {
		System.out.println(getClass().getSimpleName() + " 소리를 올립니다.");
	}
	public void volumeDown() {
		System.out.println(getClass().getSimpleName() + " 소리를 내립니다.");
	}
}

📌 예제 코드 - TvUser.java

package example;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TvUser {
	public static void main(String[] args) {
		AbstractApplicationContext factory =
			new GenericXmlApplicationContext("applicationContext.xml");

		TV tv = (TV) factory.getBean("tv");
		tv.powerOn();
		tv.volumeUp();
		tv.volumeDown();
		tv.powerOff();
	}
}

📌 applicationContext.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
	       http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<bean id="tv" class="example.samsungTV"/>
</beans>

💻 실행 결과

samsungTV 전원을 켭니다.
samsungTV 소리를 올립니다.
samsungTV 소리를 내립니다.
samsungTV 전원을 끕니다.

💬 코드 설명

  • TV는 기능을 정의한 인터페이스입니다.
  • samsungTV는 이를 구현한 클래스로, TV의 전원과 볼륨을 출력문으로 처리합니다.
  • TvUser는 applicationContext.xml에 정의된 bean 정보를 읽어와 스프링 컨테이너를 통해 객체를 생성합니다.
  • 즉, new 연산자를 사용하지 않고 getBean()을 통해 객체를 주입받습니다.
  • applicationContext.xml은 TV 객체를 구성하는 설정 파일로, 스프링이 객체를 대신 생성하고 관리하게 합니다.

💡 포인트 정리

  • interface를 통해 기능을 추상화하고, 구현체를 외부 설정으로 주입받는 구조.
  • GenericXmlApplicationContext를 사용해 XML 설정 기반의 스프링 컨테이너 활용.
  • 코드 변경 없이 설정만 바꾸면 객체 교체가 가능 (유지보수성 ↑).
  • 스프링의 DI 원리를 이해하는 첫걸음.

📌정리하자면, 이번 강의는 스프링의 DI 개념을 이해하는 입문 예제로, 인터페이스 → 구현체 → XML 설정 → 스프링 컨테이너 → 실행의 흐름을 실습해봤습니다. 추후엔 이 구조를 확장하여 다른 구현체를 넣거나, 어노테이션 기반 DI로 전환해볼 수 있습니다.