Dependency Injection Tool Deps in Raku
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Raku 언어 개발자 및 의존성 주입(DI) 패턴 학습자
난이도: 중급 (DI 개념 이해 필요)
핵심 요약
- 의존성 주입 패턴을 교육용으로 학습할 수 있는 Raku 모듈
- New, Store, Scope 3가지 라이프사이클 관리 기능 제공
is injected
트레이트 기반 자동 주입 및 블록 범위 기반 컨테이너 지원deps { ... }
DSL을 통한 내장 컨테이너 생성 가능
섹션별 세부 요약
1. 개요
- Deps는 Raku에서 의존성 주입 패턴을 학습하기 위한 경량 모듈
- 의존성 생성과 사용 분리로 모듈성/테스트성 향상
- 중요 API:
register
,get
,deps { ... }
블록 범위 컨테이너
2. 핵심 기능
- 저수준 API: 타입/이름 기반 수동 등록 및 검색
- 트레이트 기반 주입:
is injected
로 함수 매개변수 자동 주입 - 자동 인스턴스 생성: 클래스 속성과 등록된 값 매칭
- 예시:
$deps.register: Bla;
$deps.get(Bla); # Bla.new(value => "42 - 13", a => 42, b => 13)
3. 라이프사이클 관리
- New (transient): 매번 새로운 인스턴스 생성
- Store (singleton): 컨테이너당 하나의 인스턴스 재사용
- Scope (scoped):
deps { ... }
블록 내부에서만 유효 - 사용 예:
$deps.register: MyService.new, :lifecycle;
4. 우선순위 설정
:priority
로 동일 타입/이름의 제공자 간 우선순위 결정- 예시:
$deps.register: FileLogger.new, :priority;
$deps.register: ConsoleLogger.new, :priority;
5. 적용 사례
- 테스트 환경에서
MockRepo
대체 가능 :name
로 명시적 등록 및 우선순위 기반 선택- 블록 범위 내
injected
로 컨테이너 생성
결론
- 경량한 핵심 기능과 Raku 트레이트 기반 API로 DI 개념 학습에 적합
deps { ... }
블록을 활용한 내장 컨테이너 관리가 실무 적용 시 유용- 라이프사이클 및 우선순위 설정을 통해 유연한 의존성 관리 가능