DI(Dependecy Injection)

MinJi·2024년 7월 9일

DI

IoC(Inversion of Control)

  • 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 개발자가 아닌 컨테이너에서 직접 관리하는 것을 말한다.
  • 스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 소멸까지 해당 객체에 대한 관리를 직접 수행한다.

스프링 IoC 컨테이너

스프링에서 관리하는 객체를 빈(Bean)이라고 하고, 해당 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리(Bean Factory)라고 한다.

스프링 IoC 컨테이너의 역할

  • 객체(Bean)의 생명주기와 의존성을 관리한다.
  • 객체(Bean)의 생성, 초기화, 소멸 등의 처리를 담당한다.
  • 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축할 수 있다.

스프링 IoC 컨테이너의 종류

  • 애플리케이션 컨텍스트(Application Context)는 빈 팩토리(BeanFactory)를 확장한 IoC 컨테이너로 빈(Bean)을 등록하고 관리하는 기능은 빈 팩토리(BeanFactory)와 동일하지만 스프링이 제공하는 각종 부가적인 서비스를 추가 제공한다.

메이븐 프로젝트 생성

  • archetype 선택
  • 패키지 명 입력

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.beyond</groupId>
  <artifactId>di</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>01_SpringDI</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>
  • groupId: 조직을 식별하기 위한 아이디(일반적으로 회사 도메인의 역순)
  • artifactId: 그룹 내에서 유일하며, 빌드 결과물 이름
  • name: 프로젝트 이름
  • url: 참고 url
  • properties: pom.xml에서 쓸 정보들을 미리 생성함
  • dependencies: 사용할 라이브러리 추가
  • Maven -> Update Project: 정보 변경시 프로젝트 업데이트

IoC 컨테이너 생성 실습

  • main/java 경로에 resources 폴더 추가 후 Spring Bean Definition file 생성

    - 버전 설정은 가장 상단에 있는 것으로 선택(최신 버전)
  • 최종 선택 옵션

DI(Dependency Injection)

  • 하나의 객체가 사용하는(의존하는) 다른 객체를 외부에서 생성하고 주입받아 사용하는 것을 말한다.
  • 객체를 주입받는 방법으로는 메소드를 통한 의존성 주입 방법과 생성자를 통한 의존성 주입 방법이 있다.
  1. 메소드를 통한 의존성 주입
        Owner owner = new Owner();
		owner.setName("임꺽정");
		owner.setAge(32);
		// 메소드를 통한 의존성 주입
		owner.setDog(new Dog("댕댕이"));
  1. 생성자를 통한 의존성 주입
		// 생성자를 통한 의존성 주입
  		Owner owner = new Owner("홍길동", 30, new Dog("멍멍이"));

스프링 DI

  • 스프링에서는 컨테이너가 설정 정보를 읽어와서 자동으로 객체들의 의존 관계를 주입한다.
  • 스프링 컨테이너를 통해 의존성을 주입받게 되면 유지 보수가 편해지고 개발자가 작성해야 할 코드가 단순해지며 객체 간의 종속 관계(결합도)를 해소할 수 있다.

스프링 DI 실습

https://github.com/mjms0214/BEYOND_SW_CAMP_8/tree/main/framework/01_SpringDI

의존성 주입

https://henhen.tistory.com/71

0개의 댓글