Flutter Study Day 15 Dart SOLID principles

정정원·2023년 12월 19일
0

Flutter Study

목록 보기
17/17

설계원칙

SOLID란 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID 원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져있다.

SPR - 단일 책임 원칙

  • 한 개의 클래스는 하나의 일만한다.
  • 한 부분의 에러를 수정하기 위해서는 그 클래스만 수정하면 된다.
  • 클래스 분리가 심해지면 오히려 관리가 어렵다.

OCP - 개방 폐쇄 원칙

  • 확장에 대해서는 열려있고 (확장은 자유롭고), 변경에 대해서는 닫혀있다 (의존 부분의 변경은 불필요)
  • 수정 없이 확장 가능하도록 하자.
  • Iterable, Comparator 등이 좋은 예
  • String 의 경우는 상속 금지이므로 OCP에 반하는 클래스의 대표적인 예.
  • 인터페이스를 적극 활용하여 확장 가능하게 하자.

LSP - 리스코프 치환 원칙

  • 부모객체와 자식객체가 있다고 예를 들었을 때, 자식은 당연히 부모 객체로 치환 할 수 있어야 한다.
  • LSP의 핵심은 자식 클래스가 항상 부모 클래스의 역할을 충실히 수행 하는 것이다.

ISP - 인터페이스 분리 원칙

  • 객체는 자신이 사용하는 메서드에만 의존해야한다는 법칙
  • 객체가 사용하지 않는 메서드를 의존해서는 안 된다는 뜻

DIP - 의존 역전 원칙

  • 추상화에 의존해야지, 구체화에 의존하면 안 된다.
  • 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하기 보다 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙.

클래스의 의존 관계

  • Car와 Engine은 밀접하게 연결되어 있다. Car 인스턴스는 한 가지 유형의 Engine을 사용하므로 서브클래스 또는 대체 구현을 쉽게 사용할 수 없다. Car가 자체 Engine을 구성했다면 Gas 및 Electric 유형의 엔진에 동일한 Car를 재사용하는 대신 두 가지 유형의 Car를 생성해야 한다.
  • Engine의 종속성이 높은 경우 테스트하기가 더욱 어려워집니다. Car는 실제 Engine 인스턴스를 사용하므로 다양한 테스트 사례에서 테스트 더블을 사용하여 Engine을 수정할 수 없다.

  • 의존성 지옥

0개의 댓글