[TIL #19] 좋은 객체 지향 설계의 5가지 원칙 (SOLID)

2024. 11. 19. 22:55·개발/내일배움캠프 TIL

좋은 객체 지향 설계의 5가지 원칙에 대해

  • SRP(Single responsibility principle) 단일 책임 원칙
  • OCP(Open/closed principle) 개방-폐쇄 원칙
  • LSP(Liskov substitution principle) 리스코프 치환 원칙
  • ISP(Interface segregation principle) 인터페이스 분리 원칙
  • DIP(Dependency inversion principle) 의존관계 역전 원칙

 

1. SRP(Single responsibility principle) 단일 책임 원칙

  • 한 클래스는 하나의 책임만 가져야 한다.
    (하나의 책임이라는 것은 모호해서 문맥과 상황에 따라 다름)
  • 중요한 기준은 변경이다. 변경이 필요할 때 파급 효과가 적으면 해당 원칙을 잘 지킨 것

2. OCP(Open/closed principle) 개방-폐쇄 원칙

  • 소프웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 새로운 기능(확장)을 추가하기 위해 인터페이스를 구현한 하나의 클래스를 추가해서 설계

3. LSP(Liskov substitution principle) 리스코프 치환 원칙

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 함.

예) 인터페이스에서 엑셀을 밞으면 앞으로 가라는 기능 만들도록 했는데, 뒤로 가는 것으로 구현

4. ISP(Interface segregation principle) 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
  • 쇼핑몰 인터페이스 -> 회원관리 인터페이스, 상품관리 인터페이스로 분리
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.

5. DIP(Dependency inversion principle) 의존관계 역전 원칙

  • 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나다.
  • 구현 클래스에 의존하지 말고, 인터페이스에 의존해라

좋은 객체 지향 설계에 대한 이해를 하기 위해 생각을 해보다가 컴퓨터 조립이 생각이 나서 비유를 해봤다.

 

컴퓨터를 보면 메인보드가 존재하는데 여기에는 CPU, 그래픽카드, 램, SSD에 USB 포트로 마우스 키보드 등등의 다양한 악세사리까지 연결할 수 있는데 이런 부품 만드는 회사는 가지각색이다. 그런데 어떤 걸 사도(AMD와 인텔 구분은 제외) 규격에 맞게 딱 결합이 된다.

스프링에서의 인터페이스는 이 메인보드와 같은 느낌이지 않을까 생각이 든다.

 

확장성이 좋게 잘 만들어진 메인보드(인터페이스)에는 어떤 회사의 악세사리와 부품(클래스)을 가져와서 써도 문제없이 잘 돌아간다.

이와 같이 좋은 객체 지향 설계를 항상 머릿속에 그려두고 개발에 임하도록 하자. (위 원칙은 간혹 면접에도 나오는 개념이라고 한다.

'개발 > 내일배움캠프 TIL' 카테고리의 다른 글

[TIL #21] 키오스크 과제 설계 및 중간 리팩토링  (0) 2024.11.21
[TIL #20] 의존관계 주입 DI 와 제어의 역전 IoC  (0) 2024.11.21
[TIL #18] Spring Boot 어노테이션 정리, Lombok 사용법  (0) 2024.11.18
[TIL #17] JPA로 데이터베이스 연결 맛보기  (0) 2024.11.17
[TIL #16] spring DB 접근 기술에 대해  (0) 2024.11.17
'개발/내일배움캠프 TIL' 카테고리의 다른 글
  • [TIL #21] 키오스크 과제 설계 및 중간 리팩토링
  • [TIL #20] 의존관계 주입 DI 와 제어의 역전 IoC
  • [TIL #18] Spring Boot 어노테이션 정리, Lombok 사용법
  • [TIL #17] JPA로 데이터베이스 연결 맛보기
BigChoi93
BigChoi93
이곳은 저의 성장과정과 개인적인 생각을 담기 위한 공간입니다.
  • BigChoi93
    Donologue
    BigChoi93
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 개발 (53)
        • Javascript (2)
        • 내일배움캠프 TIL (41)
        • 개발일기 (4)
        • Java (2)
        • Spring (1)
        • Sql (1)
      • 일상 (0)
      • 사진 (1)
        • 포토샵 (1)
  • hELLO· Designed By정상우.v4.10.1
BigChoi93
[TIL #19] 좋은 객체 지향 설계의 5가지 원칙 (SOLID)
상단으로

티스토리툴바