ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SOLID 객체 지향 설계 5원칙
    Spring Boot/스프링부트 공부 2022. 1. 3. 09:37

    객체 지향 설계 5원칙? 

    스프링부트를 공부하면서 자주 언급되는 말이 있어 정리해본다. 

     

    목차

      1) 객체 지향 설계 5원칙이란? 

      2) SOLID 

       

       


      객체 지향 설계 5원칙이란?

      결론 : 객체 지향 프로그램을 올바르게 설계하는 원칙

      • 결합도는 낮추고, 응집도는 높인다" 관점을 재정립
      • 제품이 아닌 개념이다. 속성 메서드, 클래스, 객체, 모듈, 라이브러리 등등 전반에 녹아 있음.
      • 원칙이 녹아있으면 유지보수/리펙토링이 수월해짐
      • 디자인패턴의 뼈대, 스프링의 근간이 되는 개념

       

      SOLID 

      결론 :객체 지향이 처음 등장한 1960 이래로 시행착오를 통해 탄생한 5개의 설계 원칙이 있다. AKA, SOLID.

      • SRP 단일 책임 원칙 Single Responsibility Principle 
      • OCP 개방 폐쇄 원칙 Open Closed Principle
      • LSP 리스코브 치환 원칙 Liskov Substitution Principle
      • ISP 인터페이스 분리 원칙 Interface Segregation Principle
      • DIP 의존 역전 원칙 Dependency Inversion Principle

       

      1) 단일 책임 원칙

      결론 : "모델링 과정에서 단일 책임 원칙을 상기하며 추상화를 하자!"

       

      - 향기나는 코드, 역할을 분리한 코드

      - === 남자친구 역할, 아들 역할, 사원 역할, 친구 역할 (X)

      - 클래스로 역할 분류할 . 남자친구 - 남자친구역할  아들- 아들역할... 

      - 속성이 변하면 냄새나는 코드다. (분기문이 많으면 의심)

       

       

       

      2) 개방 폐쇄 원칙

      결론 : "확장에 대해서는 열고, 변경에는 닫아라"

       

      - 2 차량을 몰다가 1 차량을 몰면 운전 습관을 하나하나 바꿔야하는 걸까?

      - 자바에서는 2 차량, 1종차량 위에 차량 인터페이스를 만들면 다양한 자동차가 추가되도 문제 없다.

      - 편의점 업무를 "판매" 인터페이스를 만들고 직원들을 만들어 쓰면 오메야 확장성

      - 스프링에는 JDBC 사용하면 오라클 -> MySQL 바꾸더라도 수정이 필요 없는 부분이 대표적인 개방 폐쇄 적용

       

      3) 리스코브 치환 원칙

      결론 : "하위 객체는 상위 객체 인척 있어야한다"

       

      - 하위 클래스 is a kind of 상위 클래스

      - 구현 클래스 is able to 인터페이스 

       

      4) 인터페이스 분리 원칙

      결론 : "단일 책임 원칙을 다른 방법으로 해결"

       

      - 클래스에 역할을 인터페이스로 분리하여여 사용하는  

      - 인터페이스는 최소화, 상속은 최대화하는 것이 좋다,

      - 특별한 경우가 아니면 단일 책임 원칙을 우선하자

       

      5) 의존 역전 원칙

      결론 : "자기 보다 변하기 쉬운 것에 의존하지 말자"

       

      - ex) 수년을 타는 자동차 -> 스노우타이어 관계는 자동차가 타이어에 의존하는 관계이다.

      - 타이어는 계절에 따라, 마모에 따라 자주 바꿔주어야해서 좋은 관계다.

      - 타이어 인터페이스를 만들어주고, 타이어 인터페이스에 의존하는 스노우 타이어를 만들어 쓰면?

      - 의존 안하면 스노우타이어가 의존하게 되서 의존 역전이라 한다.

      - 인터페이스로 인해 얼마나 유지 보수가 쉬워지고 확장이 편해진건지 생각해 보면..?


      마무리

       

      객체 지향을 좀더 올바르게 사용할 수 있도록 고안된 법칙이다. 즉, 결합도는 낮고 응집도는 높은 프로그램을 만들어서 유지보수는 쉽고 확장성은 좋게 만드는 방법.

       

       

      출처 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해 [김종민 지음]

       

      반응형

      'Spring Boot > 스프링부트 공부' 카테고리의 다른 글

      Spring MVC란?  (0) 2022.02.19
    Designed by Tistory.