SOLID — 제로에서 포테이토 5까지

Apr 02 2023
이 기사의 DIP(Dependency Inversion Principle)에 대해 SOLID에 대한 마지막 기사가 될 것입니다.
오늘은 이 글에서 DIP(Dependency Inversion Principle)에 대해 계속 설명하겠습니다. SOLID의 다른 원리에 대해서는 잘 알지 못하더라도 선배님의 코드, 다양한 매체 기사 및 튜토리얼을 통해 배울 수 있기 때문에, 그러나 종속성 역전이 무엇인지, 어떻게 사용해야 하는지, 왜 사용해야 하는지에 대해서는 거의 듣지 못할 것입니다.

오늘은 이 글에서 DIP(Dependency Inversion Principle) 에 대해 계속 설명하겠습니다. SOLID 의 다른 원리에 대해서는 잘 알지 못하더라도 선배님 의 코드, 다양한 매체 기사 및 튜토리얼을 통해 배울 수 있기 때문에, 그러나 종속성 역전이 무엇인지 , 어떻게 사용해야 하는지, 왜 사용해야 하는지에 대해서는 거의 듣지 못할 것입니다 .

그건 그렇고, 이미 Android 개발자로 일하고 있다면 종속성 주입과 혼동하지 마십시오. 인기 라이브러리 Dagger, Hilt 및 Koin에 이미 익숙할 것입니다. 이 두 가지는 매우 다르므로 특히 인터뷰에서 설명할 때 주의해야 합니다.

종속성 주입은 클래스의 인스턴스 변수를 채우는 구현 기술입니다. 종속성 역전은 클래스가 상위 수준 추상화와 직접적인 관계만 갖도록 권장하는 일반적인 디자인 지침입니다.

DIP(Dependency Inversion Principle): 고수준 모듈은 저수준 모듈에 의존해서는 안 됩니다. 둘 다 추상화에 의존해야 합니다.

간단한 코드 구현으로 설명하겠습니다. 그 후에 DIP에 대해 더 잘 이해하게 될 것입니다. 평소와 같이 일부 기능을 수행하기 위해 클래스 Student에 대한 종속성이 있는 클래스 부터 시작하겠습니다 .Teacher

class Student(private val teacher: Teacher) {
    fun askQuestion(question: String) {
        teacher.answerQuestion(question)
    }
}

따라서 리팩토링이 DIP를 준수하도록 하여 클래스 Student와 클래스 사이에 추상화를 도입할 수 있습니다 Teacher.

interface QuestionAnswerer {
    fun answerQuestion(question: String)
}

class Teacher : QuestionAnswerer {
    override fun answerQuestion(question: String) {
        // answer the specified question
    }
}

class Student(private val questionAnswerer: QuestionAnswerer) {
    fun askQuestion(question: String) {
        questionAnswerer.answerQuestion(question)
    }
}

Student이는 클래스가 이제 QuestionAnswerer구체적인 구현( )이 아닌 추상화( )에 의존하기 때문에 DIP를 준수합니다 Teacher. 이는 인터페이스를 구현하는 모든 클래스를 클래스뿐만 아니라 클래스 QuestionAnswerer에 대한 종속성으로 사용할 수 있으므로 더 큰 유연성과 확장성을 허용합니다 .StudentTeacher

리팩토링된 버전을 본 후 종속성 반전 도 사용해야 하는 이유를 이해하셨기를 바랍니다 . DIP는 애플리케이션의 구성 요소를 분리하는 데 도움이 되며 코드를 더 유연하고 유지 관리 가능하며 테스트하기 쉽게 만들 수 있습니다.

이 기사를 읽어 주셔서 감사합니다. 내 글이 유익하고 생각을 자극하는 것이 되었기를 바랍니다. 이전에 여러분 모두를 위해 행복한 코딩을 하세요.

SOLID에 대한 이전 기사 :

단일 책임 원칙(SRP) :https:///arpalar-tech/solid-from-zero-to-potato-e7b5cfe8c7a1

개방형/폐쇄형 원칙(OCP): https:///arpalar-tech/solid-from-zero-to-potato-2-5a4c17bd8ec8

Liskov 치환 원칙(LSP): https:///arpalar-tech/solid-from-zero-to-potato-3-94d6f63dbbfe

ISP(인터페이스 분리 원칙):https:///arpalar-tech/solid-from-zero-to-potato-4-d1d9b42c3a78