의존성주입(Dependency Injection)

parkjh9370·2022년 6월 19일
0

🔎 의존성 주입 (Dependency Injection) 이란?

  • 제어의역전(Inversion of Control) 기술 중 하나이다.

📌 제어의역전 : "내가 대신 제어해줄께"
📌 의존성주입 : "니가 정의한 코드(클래스, 변수 등등)를"

즉, 나 대신 NestJS 프레임워크가 제어해 줄께 라는 뜻

예제코드

import { Controller, Get, Post, Body } from "@nestjs/common";
import { CreateCatDto } from "./dto/create-cat.dto";
import { CatsService } from "./cats.service";
import { Cat } from "./interfaces/cat.interface";

@Controller("cats")
export class CatsController {
  constructor(private catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

위의 코드에서

  constructor(private catsService: CatsService) {}

여기에 해당하는 코드를 보면 생성자에서 catService 의 타입만 지정됨. 그럼에도 불구하고

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);

여기서 catService의 create 메서드를 호출하고 있다.

이는 NestJS가 catService가 CatService타입이니 내가 직접 찾아서 할당해 줘야겠다 라고 행동하고 해당 객체를 관리하게 된다.
이후 이 클래스의 생성, 소멸 주기에 상관없이 사용이 가능하다.


내가 이해한 바로는
의존성주입이란 하나의 객체가 다른 객체의 의존성을 제공하는 기술로 메인 역할 및 기능을 정의해두고 이를 사용자 용도에 맞게 의존성을 주입시킴으로서 용도에 맞게 유지/보수할 수 있게 한다.
이를 통해 더 확장성 있고, 편리한 백엔드 어플리케이션을 구축할 수 있다.

아직 익숙치 않다보니 헷갈리는 부분도 있긴 하다. 좀 더 공부하고 익숙해 질 수 있도록 해봐야 겠다.


참조
https://optimuslee.tistory.com/68
https://choidr.tistory.com/entry/NestJS-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85

0개의 댓글