GithubHelp home page GithubHelp logo

depndency_injection's Introduction

DI(Dependency Injection) 의존성 주입

1. 의존성 주입이란?

하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다.

➡️ 일반적으로 클래스 내부에서 객체를 생성하지 않고 외부에서 객체를 생성해 주입 받는 방식을 DI라고한다. DI를 사용하면 클래스 간의 결합도를 낮추어 의존성을 줄일 수 있고, 한 클래스를 수정했을 때 다른 클래스도 수정해야 하는 상황을 막아줄 수 있음.

안드로이드에서 가능한 두 가지 방식의 의존성 주입

  • 생성자 주입(constructor injection) : 생성자를 통해 의존하는 객체 전달
  • 필드 주입(Field Injection) : 객체가 초기화 된 후에 의존하는 객체 전달.

2. 의존성 주입이 필요한 이유

1️⃣ ​의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈간의 결합도를 낮출 수 있다.

2️⃣ 코드의 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드의 수정 없이 사용할 수 있다.

3️⃣ ​단위 테스트의 편의성을 높여준다.

4️⃣ 리팩토링이 수월하다.

5️⃣ 객체 간의 의존성(종속성)을 줄이거나 없앨 수 있음.

6️⃣ ​스코프를 이용한 객체 관리

💡일일히 DI하기엔 복잡하고 힘들어서 보통 라이브러리를 쓰는게 일반적이다. 안드로이드에서는 Dagger2Koin 이 대표적인 의존성 주입 라이브러리이다.

3. Dagger2와 Koin

🍎 Dagger2
  • javaAndroid를 위해 완전히 정적으로 만들어진 컴파일 타임 의존성 주입 프레임 워크
  • 리플렉션을 사용하지 않고 컴파일 타임에 코드를 생성해내기 때문에 빠른 속도를 가진다는 장점이 있음.
  • 오류의 추적이 쉬움.
🍏 Koin
  • 순수 코틀린만으로 작성이 되어있어서 러닝 커브가 낮음.
  • 어노테이션(@) 프로세싱 및 리플렉션을 사용하지 않기 때문에 상대적으로 가벼움.
  • ViewModel 아키텍처를 위한 별도의 라이브러리를 제공해서 쉽게 MVVM 패턴을 만들 수 있음.
  • ActivityFragment, Service 등이 아닌 곳에서 사용하기 위해선 생성자로 넘기거나 별도의 구현을 해야함.
  • 아직 UI의 Controller별 Scope 관리 및 Compile 시간에 오류를 확인하는 등의 기능은 Dagger에 비해서 뒤떨어지는 측면이 있음.(물론 유닛테스트를 통해 Runtime시 에러가 발생하는 것을 방지할 수는 있음.)

depndency_injection's People

Contributors

mdb1217 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.