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

Mar 29 2023
우리 모두는 작업과 인터뷰 질문에서 'SOLID'라는 키워드에 매우 익숙하므로 'SOLID'에 대해 정말로 이해하고 있는지, 견고하려면 'SOLID'에 대해 깊이 알아야합니다. 'SOLID'는 소프트웨어 개발의 5가지 디자인 원칙을 조합한 것으로, 이러한 원칙이 일상 생활에 도움이 될 수 있습니다.

우리 모두는 작품과 인터뷰 질문에서 'SOLID'라는 키워드에 매우 익숙하므로 'SOLID'가 무엇인지 실제로 이해하고 있는지, 견고하려면 'SOLID'에 대해 깊이 알아야합니다 .

' SOLID '는 소프트웨어 개발에서 5가지 디자인 원칙의 조합으로, 이러한 원칙은 일상 생활에서 도움이 될 수 있습니다. ' SOLID '가 무엇을 의미하는지 설명하겠습니다.

  1. SRP(Single Responsibility Principle) : 클래스는 변경해야 하는 이유가 하나만 있어야 합니다.
  2. 개방/폐쇄 원칙(OCP) : 클래스는 확장에는 열려 있어야 하지만 수정에는 닫혀 있어야 합니다.
  3. LSP(Liskov Substitution Principle) : 하위 유형은 기본 유형을 대체할 수 있어야 합니다.
  4. ISP( Interface Segregation Principle) : 클라이언트가 사용하지 않는 인터페이스에 의존하도록 강요해서는 안 됩니다.
  5. DIP(Dependency Inversion Principle) : 고수준 모듈은 저수준 모듈에 의존해서는 안 됩니다. 둘 다 추상화에 의존해야 합니다.

SRP(Single Responsibility Principle)Student : 학생에 대한 정보를 저장할 뿐만 아니라 GPA 계산, 성적표 인쇄, 학부모에게 이메일 보내기 등 학생과 관련된 다양한 작업을 수행하는 클래스가 있다고 가정해 보겠습니다 .

class Student(val name: String, val grades: List<Double>) {
    fun calculateGPA(): Double {
        // calculate the GPA based on the grades
    }

    fun printReportCard() {
        // print the report card for the student
    }

    fun sendEmailToParents() {
        // send an email to the parents of the student
    }
}

위의 예가 괜찮다고 생각하고 문제가 있다고 생각한다면 걱정할 필요가 없습니다. 이전에도 그렇게 생각했습니다. 이 예에서 클래스는 단일 책임 원칙을Student 위반하여 여러 작업을 담당합니다 . 이로 인해 시간이 지남에 따라 클래스를 유지 관리하고 수정하기가 어려워질 수 있습니다.

SRP를 준수하기 위해 각 책임에 대해 별도의 클래스를 생성하여 클래스의 책임을 분리할 수 있습니다. 예를 들어 학생의 GPA 계산을 담당하는 클래스, 보고서 인쇄를 담당하는 클래스를 Student만들 수 있습니다. 카드 및 학부모에게 이메일을 보내는 책임이 있는 클래스:GPACalculatorReportCardPrinterEmailSender

class Student(val name: String, val grades: List<Double>)

class GPACalculator(val student: Student) {
    fun calculateGPA(): Double {
        // calculate the GPA based on the grades of the student
    }
}

class ReportCardPrinter(val student: Student) {
    fun printReportCard() {
        // print the report card for the student
    }
}

class EmailSender(val student: Student) {
    fun sendEmailToParents() {
        // send an email to the parents of the student
    }
}

이 접근 방식은 각 클래스에 단일 책임이 있으므로 시간이 지남에 따라 코드를 보다 쉽게 ​​유지 관리하고 수정할 수 있으므로 단일 책임 원칙을 준수합니다. 또한 책임을 분리하면 필요에 따라 각 책임에 대해 서로 다른 구현을 교체할 수 있는 기능과 같이 미래에 더 큰 유연성을 얻을 수 있습니다.

나중에 예제와 리팩토링을 통해 다른 원칙에 대해 설명하겠습니다. 이제 SRP(Single Responsibility Principle) 에 대해 더 잘 이해할 수 있기를 바랍니다 .