itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 점주
  • 생활코딩
  • POSTECH
  • 개발자
  • 세그멘테이션
  • 킨디
  • CS
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • 어플
  • 연결리스트
  • 독립서점
  • SWIFT
  • crud
  • mongodb
  • CoreData
  • SwiftUI
  • AppleDevloperAcademy
  • binding
  • ios
  • nosql

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

iOS

[iOS] 의존성 주입(Dependency Injection, DI)이 객체의 결합도를 낮춰주는 이유 (Feat. Car)

2023. 3. 8. 19:28

의존성 주입(DI)은 의존성 생성 및 관리를 종속되는 객체와 분리하기 때문에 객체의 결합을 줄여줍니다. 즉, 객체는 의존성이 어떻게 생성되거나 관리되는지 알 필요가 없으므로 의존성은 줄어들고 더 모듈화되고 유지 관리가 쉬워집니다.

이를 더 잘 이해하기 위해 예를 들어 보겠습니다. 자동차를 만들고 있다고 상상해 보세요. 자동차에는 엔진, 변속기, 바퀴와 같은 여러 구성 요소가 있습니다. 각 구성 요소에는 엔진용 연료, 변속기용 오일, 타이어용 공기 등 고유한 의존성 집합이 있습니다.

이제 자동차의 엔진을 교체하고 싶다고 가정해 보겠습니다. 긴밀하게 연결된 시스템에서는 엔진에 종속된 모든 구성 요소를 새 엔진에 맞게 수정해야 할 수 있습니다. 예를 들어, 새 엔진의 출력에 맞게 변속기를 변경하거나 새 엔진의 무게를 감당할 수 있도록 휠을 변경해야 할 수 있습니다.

하지만 의존성 인젝션을 사용하면 엔진에서 구성 요소를 분리하여 서로 독립적으로 만들 수 있습니다. 즉, 다른 구성 요소에 영향을 주지 않고 엔진을 변경할 수 있습니다. 예를 들어 엔진을 각 컴포넌트에 하드코딩하는 대신 엔진을 각 컴포넌트에 의존성으로 주입할 수 있습니다. 이렇게 하면 엔진을 변경할 때 엔진에 종속된 모든 컴포넌트가 아니라 엔진 자체만 수정하면 됩니다.

실제로 의존성 주입은 아웃소싱의 개념과 유사합니다. 회사에서 특정 작업을 전문 서비스 제공업체에 아웃소싱하는 것과 마찬가지로, 객체는 의존성의 생성 및 관리를 다른 컴포넌트나 프레임워크에 아웃소싱할 수 있습니다. 이렇게 하면 객체는 의존성이 어떻게 생성되거나 관리되는지 알 필요가 없으며 자체 기능에만 집중할 수 있습니다.

전반적으로 의존성 주입은 의존성을 줄이고 의존성 생성 및 관리를 종속된 객체에서 분리하여 객체의 결합을 줄여줍니다.

 

의존성을 주입하는 경우 vs 주입하지 않는 경우

물론 자동차 예제를 사용하여 의존성 주입과 의존성 주입을 하지 않는 것의 결합을 비교할 수 있습니다.

의존성 주입이 없는 경우:
긴밀하게 결합된 시스템에서는 각 자동차 컴포넌트가 자체 의존성을 생성하고 관리할 책임이 있습니다. 예를 들어 엔진 구성 요소는 연료, 오일, 공기 의존성을 생성하고 관리할 책임이 있습니다. 이렇게 하면 각 구성 요소가 서로 의존하는 긴밀하게 연결된 시스템이 만들어지며, 한 구성 요소의 변경이 다른 구성 요소에 영향을 미칠 수 있습니다.

엔진을 다른 종류의 연료가 필요한 새 엔진으로 교체하고 싶다고 가정해 보겠습니다. 이 시나리오에서는 새로운 연료 유형을 처리하기 위해 엔진 구성 요소를 수정해야 하며, 새 엔진을 수용하기 위해 연료, 오일 및 공기 구성 요소도 수정해야 할 수 있습니다. 이렇게 하면 구성 요소 간에 많은 결합이 발생하고 다른 구성 요소에 영향을 주지 않고 변경하기가 어렵습니다.

의존성 주입을 사용하면:
반면 의존성 주입을 사용하면 컴포넌트를 서로 분리하여 시스템에서 커플링의 양을 줄일 수 있습니다. 각 컴포넌트는 의존성을 선언하지만 의존성을 생성하거나 관리할 책임은 없습니다.

대신 별도의 컴포넌트 또는 프레임워크가 의존성을 생성 및 관리하고 필요에 따라 각 컴포넌트에 의존성을 주입합니다. 예를 들어 연료 분사 시스템은 연료, 오일, 공기 의존성을 관리하고 엔진 컴포넌트가 초기화될 때 이를 엔진 컴포넌트에 주입할 수 있습니다.

엔진을 다른 종류의 연료가 필요한 새 엔진으로 교체하려는 경우 엔진 구성 요소와 연료 분사 시스템만 수정하면 됩니다. 이렇게 하면 구성 요소 간의 결합이 줄어들고 다른 구성 요소에 영향을 주지 않고 쉽게 변경할 수 있습니다.

저작자표시 (새창열림)

'iOS' 카테고리의 다른 글

[iOS] MVVM 패턴이란?  (2) 2022.10.12
[iOS] MVC 패턴이란?  (0) 2022.10.09
iOS App States  (0) 2022.04.29
    'iOS' 카테고리의 다른 글
    • [iOS] MVVM 패턴이란?
    • [iOS] MVC 패턴이란?
    • iOS App States
    itisjustK
    itisjustK

    티스토리툴바