[Python] Dependency Injector (1)

2023. 2. 25. 21:55·Language/Python
반응형

의존성 주입 패턴(Dependency Injection Pattern)은 일반적으로 객체 생성 시, 해당 객체가 의존하는 다른 객체를 직접 생성하는 것이 아니라 외부에서 주입받도록 하는 방법이다. 이를 통해 객체 간의 결합도가 낮아지기 때문에, 유지보수 및 코드 재사용성이 높일 수 있다. Dependency Injector는 Python에서 의존성 주입 패턴을 구현할 수 있게 도와주는 라이브러리 중 하나이다. 이를 사용해 객체 간의 결합도를 낮추고, 코드의 유연성과 확장성을 높일 수 있다.

처음에는 이런 개념이 잘 와닿지 않았다. 이러한 Dependency Injector의 개념과 기능들을 코드 예시와 함께 설명하면 좀 더 쉽게 이해할 수 있다.

class Database:
    def __init__(self, connection_string):
        self.connection_string = connection_string
        ...

class UserRepository:
    def __init__(self):
        self.db = Database("schema://localhost:3306/db")

    def get_user(self, user_id):
                ...

위 코드의 UserRepository에서는 Database 클래스의 객체를 직접 생성하고 사용한다. 이렇게 되면 UserRepository와 Database 클래스가 강하게 결합된다. 만약 Database 클래스의 구현이 변경될 경우 이를 사용하고 있는 UserRepository 클래스도 함께 수정해야 하는 문제가 발생한다. 이러한 문제를 해결하기 위해 의존성 주입을 사용할 수 있다.

의존성 주입을 적용하면 UserRepository 클래스가 Database 클래스를 생성하는 것이 아니라, 외부에서 생성된 Database 객체를 주입받도록 변경할 수 있다. 예를 들어 생성자 주입(Constructor Injection) 방식을 사용하여 UserRepository 클래스의 생성자에서 외부에서 생성된 Database 객체를 받도록 수정할 수 있다. 아래는 예시 코드이다.

class UserRepository:
    def __init__(self, db):
        self.db = db

    def get_user(self, user_id):
                ...

if __name__ == '__main__':
        db_connection = Database(connection_string)
        user_repository = UserRepository(db_connection)

UserRepository 클래스에서 Database 객체를 생성하는 것이 아니라 외부에서 생성된 객체를 사용하도록 수정했다. 이를 통해 UserRepository와 Database 클래스 간의 결합도가 낮아지고, 유지보수 및 코드 재사용성이 높아진다.

반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/Python' 카테고리의 다른 글
  • [Python] pandas
  • [Python] ensure_future
  • [Python] Queue
  • [Python] GIL
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (50)
        • Java (10)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (1)
      • Book (1)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FPS
    MySQL
    JS
    mscoco
    알고리즘
    프로그래머스
    블루프린트
    웹
    Unreal
    select
    C++
    NUXT
    파이썬
    언리얼엔진4
    게임
    PS
    php
    pytorch
    자바
    map
    redis
    딥러닝
    CPP
    JavaScript
    게임 개발
    memcached
    클래스
    C
    Python
    Unreal Engine
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Python] Dependency Injector (1)
상단으로

티스토리툴바