정의:
높은 수준의 모듈은 저수준 모듈에 의존해서는 안됩니다. 둘 다 추상화에 의존해야합니다. 추상화는 세부 사항에 의존해서는 안됩니다. 세부 사항은 추상화에 의존해야합니다.
문제의 기원 : 클래스 A는 클래스 B에 직접적으로 의존합니다. 클래스 C에 의존하도록 클래스 A를 변경하려면 클래스 A 코드를 수정하여이를 달성해야합니다.이 시나리오에서는 일반적으로 복잡한 비즈니스 논리를 담당하는 높은 수준의 모듈입니다. 클래스 B와 클래스 C는 기본 원자 연산을 담당하는 저수준 모듈입니다. 클래스 A가 수정되면 프로그램에 불필요한 위험이 발생합니다.
솔루션 : 인터페이스 I 및 클래스 B 및 클래스 C에 의존하도록 클래스 A를 수정하여 인터페이스 I을 구현합니다. 클래스 A는 인터페이스 I을 통해 클래스 B 또는 클래스 C를 간접적으로 연락하여 클래스 A를 수정할 가능성을 크게 줄입니다.
의존성 반전의 원리는 추상적 인 것이 세부 사항의 변동성보다 훨씬 안정적이라는 사실에 근거합니다. 초록을 기반으로 구축 된 아키텍처는 세부 사항에 구축 된 아키텍처보다 훨씬 안정적입니다. Java에서 Abstract는 인터페이스 또는 초록 클래스를 말하며 세부 사항은 특정 구현 클래스입니다. 인터페이스 또는 초록 클래스를 사용하는 목적은 특정 작업을 수행하지 않고 사양 및 계약을 공식화하고 구현 클래스에 세부 사항을 제시하는 작업을 완료하는 것입니다.
의존성 반전 원리의 핵심 아이디어는 인터페이스 지향 프로그래밍입니다. 우리는 여전히 인터페이스 지향 프로그래밍이 구현 지향 프로그래밍보다 더 나은 위치를 설명하기 위해 예제를 사용합니다. 장면은 다음과 같습니다. 어머니는 아이에게 이야기를합니다. 그녀가 책을주는 한, 그녀는 책에 따라 아이에게 이야기를 할 수 있습니다.
예:
불법 의존의 역전
공개 클래스 학생 {public void read (Book Book) {System.out.println ( "학생이 읽기 시작 :"+book.getName ()); }} public class book {public String getName () {return "book"; }}
학생들이 웹 페이지를 읽어야 할 때는 매우 비우호적 인 디자인 인 학생 수업을 수정해야합니다. 의존성의 역전 원리를 준수하는 예를 살펴 보겠습니다.
공개 인터페이스 사람 {public void read (독자 독자); } public interface reader {public String getName (); } public class 학생을 구현하는 사람 {@override public void read (Reader Reader) {system.out.println ( "학생 시작 읽기 :"+reader.getname ()); }} public class book readement reader {public string getName () {return "book"; }} public class 웹 사이트를 구현합니다 {public string getName () {return "web page"; }} public class test {public static void main (String [] args) {person student = new Student (); 학생. 읽기 (새 책 ()); 학생. 읽기 (새 웹 사이트 ()); }}
읽기 메소드에서는 인터페이스를 매개 변수로 사용합니다.
요약 :
1. 각 클래스에 대한 인터페이스 또는 추상 클래스 또는 인터페이스 및 추상 클래스를 갖는 것이 가장 좋습니다.
2. 변수 선언은 바람직하게는 인터페이스 또는 추상 클래스입니다.
3. 상속 중 대체 원칙을 준수합니다.