DI를 빌어 먹을

3542 단어 Scala

이 기사는 OIC ITCreate Club Advent Calendar 2019의 7일째 기사입니다.



머리



DI에 대해 쓰는 좋은 기사는 많이 있지만,
어쩐지 어려운 말이라고는~라고 생각한 사람을 위한 기사입니다.

예를 들어 Scala를 사용하고 있지만,
디자인 패턴의 해설이 메인이므로
Scala 모르는 사람도 괜찮습니다.

읽는 방법



"에아아이"라고 읽습니다.

DI에 필요한 것



다음 세 가지가 필요하므로 준비합니다.
  • Interface 또는 trait
  • 구현 class
  • 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하고 무엇이 기쁘냐는 다른 우량 기사를 참고하십시오.

    좋은 웹페이지 즐겨찾기