본문 바로가기
Computer Science

[CS] IoC / DI (제어 역전과 의존성 주입)

by jyc_ 2025. 1. 20.

Inversion of Control [제어 역전]

  • 제어의 역전
  • 제어 흐름을 애플리케이션의 외부 요소에게 위임하는 패턴
  • 객체의 생성과 관리, 제공의 주체가 프로그래머가 아닌 컨테이너(프레임워크)가 되는 것
  • IoC를 통해 코드의 결합도를 낮추고, 테스트와 유지보수가 더 용이해진다.

Dependency Injection [의존성 주입]

  • IoC의 주요 기법 중 하나
  • 객체가 필요로 하는 의존성을 외부에서 주입받아 사용하는 패턴
  • 특정 서비스나 객체가 필요할 때 생성하는 것이 아니라, 외부에서 제공되는 객체를 전달받아 사용하는 방식

의존성 주입 방법

- Constructor 주입

  • 클래스의 생성자 메서드를 통해 의존성을 주입하는 방식
  • 의존성은 주입받는 생성자 매개변수를 통해 전달된다.
  • @Injectable() 데코레이터를 사용하여 의존성이 주입 가능한 상태로 만든다.
import { Injectable } from '@nestjs/common';

@Injectable()
export class SomeService {
  constructor(private readonly someDependency: SomeDependency) {}

  performAction() {
    // someDependency 사용
  }
}

 

- Property 주입

  • 클래스 내의 특정 속성에 의존성을 주입하는 방식
  • 아래의 이유로 인해 Constructor 주입 방식이 선호된다.
    1. 객체가 생성될 때 마다 특정 속성에 의존성을 추가하면 결합도가 증가한다.
    2. 의존성을 쉽게 대체하거나 테스트하기 어렵다.

'Computer Science' 카테고리의 다른 글

[CS] DTO  (0) 2025.01.20
[CS] Primary Key / Foreign Key  (0) 2025.01.20
[CS] MVC Pattern  (0) 2025.01.20
[CS] Overriding / Overloading  (0) 2025.01.20
[CS] RDBMS / NoSQL  (0) 2025.01.14