SOLID 기본정리

마음이편해·2022년 12월 2일

내가 이해한 내용을 바탕으로 해석하여 정리한 글

  • 객체지향 프로그래밍의 설계원칙이며 원칙들의 앞글자를 모아 SOLID원칙이라고 한다.

    S - Single-responsiblity Principle (단일책임의 원칙)
    O - Open-closed Principle (개방-폐쇄의 원칙)
    L - Liskov Substitution Principle (리스코프 치환 원칙)
    I - Interface Segregation Principle (인터페이스 분리의 원칙)
    D - Dependency Inversion Principle (의존 역전의 원칙)

SRP : 하나의 클래스는 하나의 책임만 가져야 함.

  • 클래스가 하나의 책임만 지게된다면, 응집도는 높게 결합도는 낮게 설계되기 때문
  • A라는 작업을 위해 설계된 클래스가 있다면 해당 클래스는 A라는 작업만 해야하며 다른작업은 할 수 없도록 해야함
  • 이 원칙을 지키게되면 유지보수 작업시 작업해야 할 범위가 명확해지며 낮은 결합도로 작업난이도도 매우 낮아지게됨

OCP : 확장(기능추가 등)에는 용이하고 변경(코드변경)에 대해서는 폐쇄적이어야 함.

  • 보통 이런경우는 추상화된 클래스( ex: 동물, 전자기기, 도형 등)를 정의해놓고 추상화된 개념안에 내용들이 추가될때 용이하도록 설계한다.
    인터페이스를 정의해놓고 사용하게 된다면 개발한 기능의 문제,버그만 없다면 새로운 기능이 추가될때에는 추상화된 클래스를 상속받아
    개발할 수 있게된다.
  • 만약 기존의 개발한 코드가 변경이 되어야한다면 다른 클래스들에 영향도는 매우 적을것이다.

LSP : 자식클래스는 상위클래스의 기능을 동작할 수 있어야함.

  • 자식클래스에서 상위클래스의 기능을 수행한다는 의미는 자식클래스는 상위클래스의 의미를 일관되게 유지한다는 의미
  • 앞서말한 OCP와 유사하게 확장의 개념이 포함된다고 볼 수 있음

ISP : 인터페이스는 서로 분리되어야함.

  • SRP는 클래스 자체에 하나의 책임이었다면 ISP는 인터페이스의 개념 자체도 포괄적으로 여러 기능을 포함한것이 아닌 하나의
    개념만 포함하여 작성되어야 한다는 의미

DIP : 클래스, 객체간 의존성이 생긴다면 인터페이스와 의존성이 생겨야 함

  • 필연적으로 객체끼리는 의존성이 생기기 마련이다. 그러한 의존성을 객체,클래스간에 생기는것이 아닌 추상화된 클래스, 인터페이스와 생기도록 설계하는것을 지향하는 것
  • 추상화된 인터페이스의 함수를 호출하여 하위클래스를 직접호출하는것이 아닌 상위 추상화 클래스의 함수를 호출하는것이 바람직한것을 의미함

추후 SOLID 개념을 포함한 소스코드를 작성하여 올리도록하자!

0개의 댓글