SOLID 원칙

1. Single Responsibility Principle (SRP, 단일 책임 원칙)

  • 하나의 클래스는 단 하나의 책임만을 가져야 한다.

2. Open-Closed Principle(OCP, 개방-폐쇄 원칙)

  • 기존의 코드는 변경하지 않으면서 기능을 추가할 수 있도록 설계.

3. Liskov Substitution Principle(LSP, 리스코프 치환 원칙)

  • 부모클래스의 인스턴스를 자식클래스의 인스턴스로 대신할 수 있어야 한다.
  • 피터 코드의 상속 규칙을 지키는 것.
  • 상속은 하면서 재정의하지 않는 느낌? 인 것 같다…

4. Dependency Inversion Principle(DIP, 의존 역전 원칙)

  • 변화하기 어려운 것, 변화가 없는 것에 의존하다.
  • 인터페이스나 추상클래스에 의존하라!
  • 의존성 주입으로 변화를 쉽게 수용 가능! (즉, setter() 메소드가 있어야함)

5. Interface Segregation Principle(ISP, 인터페이스 분리 원칙)

  • 인터페이스를 클라이언트에 특화되도록 잘게 쪼개라!

  • SRP -> ISP

    SRP이면 반드시 ISP 인 것은 아니다.

  • 산탄총 수술

    하나의 책임이 여러개의 클래스로 분리돼 있는 경우.

    횡단 관심(Cross-Cutting Concern)으로 분류 가능한 경우. - 시스템의 부가 기능 ex) 로깅, 보안, 트랜잭션

  • 응집도 : 한 프로그램 요소가 얼마나 뭉쳐있는가를 나타내는 척도
  • 결합도 : 프로그램 구성 요소들 사이가 얼마나 의존적인지를 나타는 척도.