의존성 주입에 대해 이야기하십시오
객체 지향 프로그래밍에서 우리가 종종 다루는 문제는 분리하는 것입니다. 프로그램 커플 링이 낮을수록 프로그램의 가독성과 유지 보수성을 나타냅니다. 제어의 역전 (제어 또는 IOC)은 객체 지향 프로그래밍의 일반적으로 사용되는 설계 원칙입니다. 이 원리를 사용하면 커플 링을 줄일 수 있습니다. 그 중에서도 종속성 주입은 가장 일반적으로 사용되는 제어 역전 구현입니다.
의존성이란 무엇입니까?
의존성은 프로그램에서 일반적인 현상입니다. 예를 들어, 가스 에너지 클래스의 인스턴스 에너지는 클래스 카에서 사용됩니다. 일반적인 관행은 자동차 클래스에서 가스 에너지 클래스의 인스턴스를 명시 적으로 만들어 에너지에 할당하는 것입니다. 다음 코드에 표시된대로
인터페이스 에너지 {} 클래스 가스 에너지는 에너지 {} 클래스 카 {에너지 에너지 = 새로운 가스 에너지 ();}문제가 있습니다
클래스 자동차는 불필요한 책임을 맡고 있으며 필연적으로 심각한 결합을 갖는 에너지 대상의 생성에 책임이 있습니다. 현실적인 예를 들어, 자동차가 사용하는 에너지를 사용하는 것은 자동차의 책임입니다. 자동차는 자동차가 아니라 자동차 제조업체에 의존하는 에너지입니다.
확장 성. 우리가 에너지를 전력으로 수정하고 싶다고 가정하면, 우리는 공개 폐쇄의 원리를 준수하지 않는 자동차 클래스를 수정해야합니다.
단위 테스트에는 도움이되지 않습니다.
의존성 주입
의존성 주입은 그러한 행동입니다. 클래스 카에서 가스 에너지 물체는 적극적으로 생성되지 않지만 가스 에너지 물체를 외부에서 전달하여 의존성이 설정됩니다. 의존성 주입의 세 가지 일반적인 방법이 있습니다.
생성자 주입
의존성 주입을 완료하기 위해 필요한 종속성을 생성자의 매개 변수로 전달하십시오.
계급 자동차 {에너지 메노르기; 공공 차 (에너지 에너지) {menergy = 에너지; }}세터 메소드 주입
세터 메소드를 추가하면 매개 변수가 주입 해야하는 종속성이며 종속성 주입을 완료 할 수 있습니다.
계급 자동차 {에너지 메노르기; 공공 void setenergy (에너지 에너지) {menergy = 에너지; }}인터페이스 주입
인터페이스 주입은 자명하고, 종속성 주입을위한 인터페이스 세트를 생성하는 것이며, 종속성은 매개 변수로 전달되며, 특정 구현에 대한 종속성 주입은 통합 인터페이스를 호출하여 완료됩니다.
인터페이스 EnergyConsumerInterface {public void setenergy (Energy Energy);} Class Car Implements EnergyConsumerInterface {Energy Menergy; 공공 void setenergy (에너지 에너지) {menergy = 에너지; }}인터페이스 주입은 세터 메소드 주입과 유사하며, 차이는 인터페이스 주입이 통합 된 방법을 사용하여 주입을 완료하는 반면, 세터 메소드 주입의 메소드 이름은 비교적 캐주얼하다는 것입니다.
프레임 워크 트레이드 오프
의존성 주입을위한 많은 프레임 워크가 있으며, 가장 유명한 것은 Guice입니다. 물론 봄은 의존성 주입도 지원합니다. Guice는 런타임 읽기 주석을 사용하고 종속성을 생성하고 반사를 통해 주입합니다. 이 양식은 Android 모바일 장치에 그다지 적합하지 않습니다. 결국, 이러한 작업은 런타임에 처리되며 고성능 요구 사항이 있습니다.
Dagger는 Android 개발에 적합한 의존성 주입 라이브러리입니다. 또한 클래스 주석의 형태를 사용합니다. 차이점은 컴파일 타임에 보조 클래스를 생성하고 생성 된 보조 클래스가 런타임에 종속성 주입을 완료하는 데 사용될 때까지 기다립니다.
사용 여부
실제로 프레임 워크 사용 여부에 관계없이 문제가됩니다. 프레임 워크를 사용하는 경우 팀의 모든 사람은 의존성 주입을 해결하기 위해 코드를 작성하기 위해 지침을 따라야합니다. 이러한 프레임 워크는 시작하기가 쉽지 않으며 학습 계수는 비교적 복잡하고 마스터하기가 어렵 기 때문에 고려해야 할 문제이기도합니다.
저의 개인적인 의견은 이러한 프레임 워크의 사용을 추천하거나 반대하지 않는다는 것입니다. 그러나 때로는 프레임 워크를 희망한다고 생각하므로 일상 생활에서 이러한 문제에주의를 기울이는 것이 좋습니다. 인공적인 회피도 우리 자신의 기본 요구 사항이 아닌가?
의존성 검색
종속성 검색은 의존성 주입의 수동적 수용과 달리 제어 반전 원칙의 구체적인 구현입니다. 종속성 검색은 활성 요청입니다. 필요한 경우, 객체는 프레임 워크에서 제공 한 메소드를 호출하여 얻습니다. 획득 할 때, 관련 구성 파일 경로, 키 및 기타 정보는 얻은 객체의 상태를 결정하기 위해 필요합니다.
위의 내용은 종속성 주입에 대한 정보에 대한 자세한 소개입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 사이트를 지원 해주셔서 감사합니다!