gi_dor

ioC , DI 본문

Back_End/Spring

ioC , DI

기돌 2024. 5. 19. 19:24
728x90

IoC 

‘제어역전’ 또는 ‘역전 제어’ , '의존성 역전'

프로그램의 흐름을 개발자가아닌 프레임워크가 관리한다
객체의 생성과 생명주기 관리를 프레임워크가 담당하므로 개발자는 비즈니스 로직에 집중 할 수 있게된다
스프링에서 애플리케이션 컨텍스트 Application Context 가 이런 역할을 담당한다
빈Bean 이라고 하는 객체들의 생성 , 설정 , 관리를 담당

자신이 사용할 메서드나 객체의 호출 작업을 개발자가 결정하지 않고 외부에서 결정 되는 것을 의미
다른객체를 직접 생성하거나 , 제어하는것이 아닌 , 외부에서 관리하는 객체를 가져와 사용하는것

객체 간의 의존성을 낮추기 위해, 객체가 직접 자신이 필요로 하는 의존 객체를 생성하지 않고, 외부에서 생성하여 주입하는 방식을 IoC라고 한다

기존 

  • 객체생성
  • 의존성 객체 생성 - 클래스 내부에 생성
  • 의존성 객체 메서드 호출
public class A {
	b = new B();	// 클래스 A에서 new 키워드로 클래스 B의 객체 생성
}

스프링에서는

  • 객체생성
  • 의존성 객체 주입 - 스스로 만들지 않고 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입
  • 의존성 객체 메서드 호출
public class A {
 private B b;	// 어디선가 받아온 객체를 b에 할당
}

스프링이 모든 의존성 객체를 스프링이 만들어주고 필요한 곳에 주입시켜 줌으로써 Bean 들은 싱글톤 패턴의 특징을 가지며 제어의 흐름을 사용자가 컨트롤하는 것이 아닌 , 스프링에게 맡겨 작업을 처리한다


 

DI 

의존성 주입 (DI: Dependency Injection)

 객체가 직접 의존하는 객체를 생성하지 않고, 외부에서 의존 객체를 주입하는 방식을 의존성 주입이라고 합니다.

  • 제어의 역전을 구현하기 위해 사용하는 방법
  • 자신이 사용할 객체를 자신이 직접 생성하지 않고, 외부 모듈이 조립해주는 객체를 사용하는 것
  • 객체 사이의 의존관계를 스프링 설정 파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 처리해준다
  • @Autowired  어노테이션을 통해 의존성 주입을 쉽게 구현할 수 있다
    결합도를 낮추고 코드의 유연성을 높일수 있다
public class A {
// A에서 B를 주입받음
    @Autowired
    B b;
}

DI를 사용하는 이유

  • 자신이 사용할 객체(의존하는 객체)를 직접 생성하지 않고, 외부에서 생성한 후 주입을 시켜주는 방식
  • 다른 객체로 쉽게 교체할 수 있다는 것은 애플리케이션의 확장성을 높이는 것

 

애플리케이션의 확장성을 높이는 방법

  1. 자신이 사용할 객체를 자신이 결정하지 않는다.
  2. 인터페이스를 이용한 느슨한 결합을 유도한다.
  3. 의존성 주입을 통해서 외부모듈로부터 자신이 사용할 객체를 주입받는다.

 

스프링의 @Component , @Service , @Repository 등의 어노테이션은 특정클래스를 스프링 빈으로 
등록하는데 사용된다 , 이런 빈들은 스프링 컨테이너에 의해 관리되며 필요한 의존성이 자동으로 주입된다

 

 

 

 

 

 

 

스프링의 콘셉트(IoC, DI, AOP, PSA) 쉽게 이해하기

❕ 들어가며 이번 글에서는 스프링의 중요한 콘셉트인 IoC(제어의 역전), DI(의존성 주입), AOP(관점 지향 프로그래밍), PSA(이식 가능한 서비스 추상화)에 대해 알아보겠습니다. 💡 이 글을 읽게 됨

shinsunyoung.tistory.com

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - 예스24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

728x90

'Back_End > Spring' 카테고리의 다른 글

Spring MVC , Controller  (1) 2024.03.12
MyBatis  (4) 2024.03.12
Spring AOP  (0) 2024.03.12
빌드도구 Maven  (0) 2024.03.11
Spring Framework  (0) 2024.03.11