ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5장 - 객체 지향 설계 5원칙 - SOLID
    Spring Framework/스프링 입문을 위한 자바 객체 지향의 원리와 이해 2023. 4. 18. 00:01
    728x90

    SOLID

    • SRP - 단일 책임 원칙
      • 어떤 클래스를 변경해야 하는 이유는 오직 하나여야 한다
      • 만약 if문들이 많이 보인다면 code smell을 고려해보아야 한다.
    • OCP - 개방 폐쇄 원칙
      • 자신의 확장에는 열려있어야 하고, 주변의 변화에는 닫혀있어야 한다.
      • 운전자가 자동차를 타는데 마티즈를 타던 소나타를 타던 운전하는 습관이 바뀌면 안 된다.
      • JDBC를 활용할 때 데이터베이스가 oracle, mysql, ms-sql로 바뀌어도 JDBC 인터페이스라는 완충 장치로 인해 애플리케이션은 변화에 영향을 받지 않는다.
      • 편의점 직원이 판매하는 행위는 손님이 학생인지, 노인인지, 여자인지에 전혀 영향을 받지 않으며, 손님도 편의점 직원이 교대근무를 하더라도 구매라는 행위에 전혀 영향을 받지 않는다.
    • LSP - 리스코프 치환 원칙
      • 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.
      • 아버지 춘향이 = new 딸() 이런 경우에는 딸을 하나 낳아서 춘향이라는 이름을 준 것까진 괜찮지만 아버지의 역할을 기대하고 있는 것이 이상하다.
      • 동물 뽀로로 = new 펭귄() 이런 경우에는 펭귄이 동물의 역할을 수행할 수 있으니 정상적이다.
      • 논리적으로 이상이 없어야 하며, 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 수행하는데 문제가 없어야 한다.
    • ISP - 인터페이스 분리 원칙
      • 단일 책임 원칙과 유사한 부분이 있습니다. 예를 들어 복합기를 예시로 보면 복합기는 스캔, 인쇄, 복사 등의 역할을 수행합니다. 즉 3가지 역할을 수행하고 있습니다.
      •  이런 경우 3개의 인터페이스로 분리하여 원하는 기능한 implements 하는 방식으로 분리할 수 있습니다.
    • DIP - 의존 역전 원칙
      • 자주 변경되는 구체 클래스에 의존하지 말아야 한다.
      • List<String> myList = new ArrayList<String> 이런 코드를 작성하면 List는 인터페이스이기 때문에 List인터페이스를 구현하고 있는 어떤 객체를 ArrayList 대신 사용할 수 있게 됩니다.

    댓글

Designed by Tistory.