DI를 빌어 먹을
이 기사는 OIC ITCreate Club Advent Calendar 2019의 7일째 기사입니다.
머리
DI에 대해 쓰는 좋은 기사는 많이 있지만,
어쩐지 어려운 말이라고는~라고 생각한 사람을 위한 기사입니다.
예를 들어 Scala를 사용하고 있지만,
디자인 패턴의 해설이 메인이므로
Scala 모르는 사람도 괜찮습니다.
읽는 방법
"에아아이"라고 읽습니다.
DI에 필요한 것
다음 세 가지가 필요하므로 준비합니다.
DI에 대해 쓰는 좋은 기사는 많이 있지만,
어쩐지 어려운 말이라고는~라고 생각한 사람을 위한 기사입니다.
예를 들어 Scala를 사용하고 있지만,
디자인 패턴의 해설이 메인이므로
Scala 모르는 사람도 괜찮습니다.
읽는 방법
"에아아이"라고 읽습니다.
DI에 필요한 것
다음 세 가지가 필요하므로 준비합니다.
Interface 또는 trait
구현이 없는 함수를 정의합니다.
언어에 따라 Interface이거나 trait이지만, 하는 것은 함께입니다.
이번에는 Scala를 사용하고 있기 때문에 trait입니다.
예
Hoge.scala
trait Hoge {
def hello()
}
구현 클래스
trait를 상속해, 함수의 내용을 구현한 class입니다.
클래스 이름은 추적 이름 + Impl입니다. (Impl은 Implement의 약어! 일본어로 구현의 의미!)
예
HogeImpl.scala
class HogeImpl extends Hoge {
def hello() {
println("こんにちは")
}
}
DI 컨테이너
DI를하는 라이브러리입니다.
여기에서는 Hoge를 사용할 때 HogeImpl이 Hoge에 주입되도록 설정합니다.
이번에는 Playframework에 표준으로 붙어있는 guice를 사용하고 있습니다.
라이브러리에 따라 설정하십시오.
module.scala
import play.api.inject.Module
import play.api.{Configuration, Environment}
class HogeModule extends Module {
def bindings(environment: Environment, configuration: Configuration) =
Seq(
bind[Hoge].to[HogeImpl] // ここで設定をしている
)
}
DI 설명
HogeImpl을 사용하는 대신 Hoge를 사용합니다.
어, Hoge는 구현 쓰지 않았거나 움직이지 않아? 라고 생각합니다만,
그것을 좋은 느낌으로하는 것이 DI입니다.
컴파일 또는 런타임 시 DI 컨테이너는 설정된 대로 대체됩니다.
HogeImpl로 대체되므로,
Hoge.hello()
를 실행하면,こんにちは
출력됩니다이 대체 메커니즘은 DI입니다.
후기
DI하고 무엇이 기쁘냐는 다른 우량 기사를 참고하십시오.
Reference
이 문제에 관하여(DI를 빌어 먹을), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/agoetc/items/af3eeb574d396b0ef4ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)