TIL (Today I Learned)

12월 02일(수)

학습내용

  • 붱이에게 SOLID 원칙에 대해서 배웠다.
    • 단일책임원칙(Single Responsiblity Priciple)
      • 클래스는 한개의 책임만 담당해야한다.
      • 한 파일 당 200라인을 초과하는가(extension 포함)를 지표로 단일책임원칙을 잘 지키고 있는지 확인할 수 있다.
    • 개방페쇄원칙(Open Closed Principle)
      • 클래스는 기능 확장이 원활해야하고, 수정은 지양해야한다.
    • 리스코프 치환 원칙(Liskov Substitution Principle)
      • 상속을 해서 구현을 할 경우, 구현한 자식클래스가 부모클래스를 대체(치환)할 수 있어야 한다.
      • 즉 어떤 클래스를 상속해서 새로운 자식 클래스를 구현할 때, 상속한 클래스의 속성을 변경하지 않는 자식 클래스를 구현해야 한다.
    • 인터페이스 분리 원칙(Interface Segregation Principle)
      • 인터페이스(프로토콜)을 가능한 최소한의 크기로 구현해야한다는 원칙이다. 그래서 인터페이스를 채택한 클래스가 불필요한 기능을 구현하지 않도록 해야한다.
    • 의존관계 역전 원칙(Dependency Inversion Principle)
      • 의존하는 클래스와 의존 당하는 클래스의 관계로 구현하지 않고, 두 클래스를 추상화에 의존시켜서 클래스 간의 의존관계를 없애기 위한 원칙이다.
      • 붱이가 마우스와 데스크탑의 비유로 이를 설명하였다. 한 데스크탑에서만 연결해서 사용가능한 마우스를 만들면 마우스가 고장나면 이를 교체하기 위해 큰 비용이 발생한다. 하지만 USB Type A 규격을 데스크탑과 마우스가 채택하면, 이 규격을 따르는 제품은 모두 호환이 가능하게 된다.
      • USB Type A 인터페이스(추상화)에 데스크탑과 마우스를 의존시킴으로써 데스크탑이 마우스에 의존하는 관계가 사라지게 되는 것이다.
      • Delegate Pattern은 의존관계 역전 원칙의 한가지 예이다.

문제점/고민한점

  • 상속을 쓰지 않는 프로그램이라면 리스코프 치환 원칙을 고려하지 않아도 되는 것인가?
  • 리스코프 치환 원칙을 지키면 무슨 이점이 있을까?

해결방법

  • 상속을 쓰지 않는 프로그램이라면 리스코프 치환 원칙을 고려하지 않아도 되는 것인가?
    • 그렇다. 리스코프 치환 법칙은 상속에 관한 원칙이기 때문이다.
  • 리스코프 치환 원칙을 지키면 무슨 이점이 있을까?
    • 잠재적인 버그 유발을 방지할 수 있다. 이 원칙을 지키지 않을 경우, 부모 타입 변수에 자식 타입이 들어갈 경우 문제가 생길 수 있다.