[객체 지향 프로그래밍 및 설계의 5가지 기본 원칙] - SOILD 원칙

2024. 9. 9. 20:04·✏ Study/Java

[객체 지향 프로그래밍 및 설계의 5가지 기본 원칙] - SOILD 원칙

  • SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)
  • 코드 확장 및 유지 보수가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 감소시킴으로써 프로젝트 개발의 생산성을 높일 수 있습니다.

1. 단일 책임 원칙 (Single Responsiblity Principle)

 

 • 하나의 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙입니다. 여기 '책임'은 '기능'을 의미합니다.

 

 •  이는 클래스(객체)가 변경되는 이유는 한 가지여야 한다는 것와 같습니다.

 

 •  즉, 하나의 클래스(객체)는 하나의 기능을 담당하여 하나의 책임을 수행하는데 집중될 수 있도록 클래스를 분리하여 설계하라는 의미입니다.

 이때 객체지향 설계의 핵심인 높은 응집도(하나의 책임을 명확히 정의하고 관련 기능을 잘 묶는 것)와 낮은 결합도(다른 클래스와의 의존성을 최소화하는 것)를 고려하여 분리하여야 합니다.

 

 • SRP의 궁극적인 목적은 프로그램의 유지보수성 향상입니다.

 

 • 너무 많은 책임 분리로 책임이 파편화되어있는 경우 '산탄총 수술(Shotgun Surgery)'로 다시 응집력을 높여줍니다.


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

 

 •  확장에는 열려있고 수정에는 닫혀있어야 한다는 원칙입니다.

 

 •  즉, 새로운 변경 사항이 발생했을 때 유연하게 코드를 추가함으로써 쉽게 기능을 확장할 수 있게 확장에 대해서 개방적(Open)이고 객체를 직접적으로 수정하는 것은 제한하는 수정에 대해서는 폐쇄적(Closed)으로 설계되어야 한다는 의미입니다.

 

 •  OCP는 추상화를 통한 관계 구축을 권장함으로써, 궁극적으로  다형성과 확장을 가능케 하는 객체지향의 장점인 유연성, 재사용성, 유지보수성 등을 활용할 수 있습니다.

 

 •  OCP의 대표적인 예시가 Java의 데이터베이스 인터페이스인 JDBC입니다.


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

 

 •  서브 타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다는 원칙입니다.

 

 •  즉, 부모 클래스 자리에 자식 클래스를 사용해도 코드의 원래 의도대로 잘 작동해야 한다는 의미입니다.

 

 •  LSP의 궁극적인 목적은 다형성을 통한 확장성 획득입니다.

 

 •  LCP의 대표적인 예시가 Java의 Collection 인터페이스입니다.


4. 인터페이스 분리 원칙 (Interface Segregation Principle)

 

 •  인터페이스를 클라이언트의 목적과 용도에 적절하게 분리하여, 목적과 용도에 적합한 인터페이스 만을 제공하여야 한다는 원칙입니다.

 

 •  이를 위해서 이미 구성한 인터페이스는 변경하지 않습니다.

 이후 수정사항이 발생하여도 별도의 인터페이스를 생성하여 해당 인터페이스를 주입받도록 구현하지, 인터페이스를 분리하지 않습니다.

 

 •  SRP이 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조하는 것입니다.


 •  즉, SRP의 목표가 클래스 분리를 통하여 이루어진다면 ISP는 인터페이스 분리를 통하여 설계하는 원칙입니다.


5. 의존 역전 원칙 (Dependency Inversion Principle)

 

 •  어떤 클래스를 참조해야 하는 상황이면 그 클래스를 직접 참조하는 것이 아니라 그 상위 요소를 참조하라는 원칙입니다.

 

 •  즉, 구체적인 구현 클래스에 의존하지 말고 인터페이스나 추상 클래스에 의존하라는 의미입니다.

 

 •  구체적인 하위 모듈에 클라이언트가 의존하게 되면, 하위 모듈에 변화가 있을 때마다 클라이언트나 상위 모듈의 코드를 수정해야 되는 문제가 발생합니다.

저작자표시 비영리 변경금지 (새창열림)

'✏ Study > Java' 카테고리의 다른 글

[계산기 만들기] SOLID 원칙  (0) 2024.09.09
'✏ Study/Java' 카테고리의 다른 글
  • [계산기 만들기] SOLID 원칙
레이제로
레이제로
  • 레이제로
    한 걸음
    레이제로
  • 전체
    오늘
    어제
    • 분류 전체보기 (11)
      • ✍🏻 TIL (4)
        • 혼자 공부하는 컴퓨터 구조+운영체제 (4)
      • ✏ Study (3)
        • Problem Solving (1)
        • Spring (0)
        • Java (2)
        • Data Structure (0)
        • Algorithm (0)
      • 💻 Code Kata (4)
        • Algorithm (4)
        • SQL (0)
      • 📃etc. (0)
        • JS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 개발 공부 외 이모저모
  • 공지사항

  • 인기 글

  • 태그

    java
    나머지
    FastIO
    length()
    Solid 원칙
    나눗셈
    length
    프로그래머스
    음수
    OOP
    코드카타
    size()
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
레이제로
[객체 지향 프로그래밍 및 설계의 5가지 기본 원칙] - SOILD 원칙
상단으로

티스토리툴바