스프링의 핵심 기술 익히기(1) - DI(의존성 주입)

김태은·2022년 4월 25일
0
post-thumbnail

Spring Framework란

  • 스프링 프레임워크는 자바 웹 애플리케이션 개발을 위한 오픈 소스 프레임워크로, 기존 프레임워크보다 가벼운 경량 프레임워크

  • 스프링은 경량 컨테이너라고도 부른다. '컨테이너'라고 하면 대표적인 것으로 톰캣을 들 수 있다. 톰캣은 서블릿 컨테이너라고 부르는데, 그 이유는 톰캣을 실행하면 톰캣은 서블릿의 생성, 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지고 서블릿을 관리하기 때문이다.

  • 스프링도 마찬가지로 애플리케이션에서 사용되는 여러 가지 빈(클래스 객체)를 개발자가 아닌 스프링이 권한을 가지고 직접 관리한다.

Spring framework를 이루는 다양한 기술

Spring Framework 특징

  • EJB보다 가볍고 배우기도 쉬우며 경량 컨테이너의 기능을 수행한다.
  • 제어 역행(IoC, Inversion of Control)기술을 이용해 애플리케이션 간의 느슨한 결합을 제어한다.
  • 의존성 주입(DI, Dependency Injection) 기능을 지원한다.
  • 관점 지향(AOP, Aspect-Oriented Programming) 기능을 이용해 자원 관리를 한다.
  • 영속성과 관련된 다양한 서비스를 지원한다.
  • 수많은 라이브러리와의 연동 기능을 지원한다.

  • 의존성 주입 : 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법
  • 제어 역행 : 서블릿이나 빈 등을 개발자가 코드에서 작성하지 않고 프레임워크가 직접 수행하는 방법
  • 관점 지향 : 핵심 기능 외 부수 기능들을 분리 구현함으로써 모듈성을 증가시키는 방법

DI(Dependency Injection)

  • 의존성 주입이란 연관 관계를 개발자가 직접 코딩을 통해 컴포넌트(클래스)에 부여하는 것이 아니라, 컨테이너가 연관 관계를 규정하는 것
    -> 코드에서 직접적인 연관 관계가 발생하지 않으므로 각 클래스들의 변경이 자유로워짐(loosely coupled, 약한 결합)

  • 의존성 주입을 적용했을 때 얻을 수 있는 장점

  1. 클래스들 간의 의존 관계를 최소화하여 코드를 단순화할 수 있음
  2. 애플리케이션을 더 쉽게 유지 및 관리할 수 있음
  3. 기존 구현 방법은 개발자가 직접 코드 안에서 객체의 생성과 소멸을 제이했지만, 의존성 주입은 객체의 생성, 소멸과 객체 간의 의존 관계를 컨테이너가 제어

public class Store { 
	private Pencil pencil; 
    public Store() { 
    	this.pencil = new Pencil(); 
    } 
 }
    

-> 문제점 : 두 클래스가 강하게 결합되어 있음, 객체들간의 관계가 아니라 클래스들간의 관계가 맺어지고 있음

public class Store { 
	private Product product; 
    public Store(Product product) { 
    	this.product = product; 
     } 
 }

-> pencil을 product로 변경하여 강하게 결합되어 있는 부분 제거

public class BeanFactory { 
	public void store() { 
    // Bean의 생성 
    Product pencil = new Pencil(); 
    // 의존성 주입 
    Store store = new Store(pencil); 
    } 
 }

-> 객체(빈) 생성 -> 의존성 있는 두 객체를 연결하기 위해 한 객체를 다른 객체로 주입

  • 이런 개념은 제어의 역전(Ioc)로 불리기도 함.어떠한 객체를 사용할지에 대한 책임이 BeanFactory와 같은 클래스에게 넘어갔고, 자신은 수동적으로 주입받는 객체를 사용하기 때문

출처 : https://mangkyu.tistory.com/150?category=761302

0개의 댓글