SOLID(객체 지향 설계 원칙)

귀찮Lee·2022년 6월 14일
0

Spring

목록 보기
2/30

◎ SOLID

  • 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙
    (수많은 사람들이 고민하고 시행착오를 겪으면서 만든 원칙)
  • SRP, OCP, LSP, ISP, DIP의 첫글자를 땀

◎ SRP(Single Responsibility Principle, 단일 책임의 원칙)

  • 클래스가 제공하는 기능들은 하나의 책임을 수행하는데 집중해야 한다는 원칙

  • SRP를 안지켜질 때

    • 응집력이 낮아지고, 결합도는 높아진다.
    • 사용하지 않는 기능도 포함될 수 있다.
      ex1) 변수 레벨에서, 하나의 속성이 여러개의 의미를 가지는 경우
      ex2) 메서드 레벨에서, if문이 많은 경우
  • SRP가 잘 지켜질 때

    • 응집력이 높아지고, 결합도는 낮아진다.
    • 코드의 가독성이 좋아짐
    • 테스트 범위가 작아져, 유지보수가 편해짐
    • 수정이 용이해짐
      ex) AOP를 사용해서 부가기능을 분리하기
  • 기타

    • 응집력 : 비슷한 일을 하는 기능 즉, 하나의 책임에 포함되는 기능들이 잘 뭉쳐져 있는지의 정도
      • 하나의 클래스가 하나의 책임을 지고 있는가?
    • 결합도 : 클래스 간의 의존도
      • 하나의 클래스를 수정하는데 다른 클래스들도 수정해야 한다면 결합도가 높음

◎ OCP(Open Close Principle, 개방폐쇄의 원칙)

  • 확장에는 열려있고(Open), 변경에는 닫혀 있어야 한다(Close)는 원칙입니다.

  • 목적

    • 시스템의 구조를 올바르게 재조직(리팩토링)하여 수정 시에 하나의 모듈만 수정하게 함
    • 이미 제대로 동작하고 있던 원래 코드를 변경하지 않아도, 기존의 코드에 새로운 코드를 추가함으로써 기능의 추가나 변경이 가능
  • OCP가 안지켜지면

    • 객체 지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성 등을 얻을 수 없다.

◎ LSP(The Liskov Substitution Principle, 리스코브 치환의 원칙)

  • Lower Class의 객체는 Upper Class의 참조 변수에 대입해서 Upper Class의 역할을 수행하는데 문제가 없어야 한다는 원칙

  • ex) 상위 클래스에서 accelerte 라는 메서드를 사용했는데, 하위 클래스에서 accelerte를 Overriding 하여 감속하게 하면 안된다.

    • 하위 클래스를 상위 클래스 대신에 사용한다면, accelerte 사용시 감속함

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

  • 인터페이스의 단일 책임을 위한 원칙
  • 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 함

◎ DIP(Dependency Inversion Principle, 의존성 역전의 원칙)

  • 자주 변경되는 구체 클래스에 의존하지 않고, 추상화(일반화) 된 클래스에 의존함 (의존이 역전된 형태)
  • ex) Spring framework의 IOC 컨테이너

◎ 참고 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

0개의 댓글