새소식

Programming/ETC

객체 지향 설계의 5가지 원칙 - SOLID

 

 

 

SOLID란?

 

객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙으로

시간이 지나도 유지 보수와 확장이 용이한 시스템을 만들 때 적용한다.

애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략에 속한다.

SRP, OCP, LSP, ISP, DIP의 앞 문자를 따서 SOLID라 칭한다.

 

 

S(SRP)

 

  • 단일 책임 원칙(Single Responsibility Principle)
  • 한 클래스는 하나의 책임만 가져야 함
  • 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이라 할 수 있음
  • 다른 객체 지향 원리를 적용하는 기초
  • ex) UI 변경, 객체의 생성과 사용 등 각각의 역할과 기능 분리

 

 

O(OCP)

 

  • 개방-폐쇄 원칙(Open/Closed Principle)
  • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 함
  • 요구사항의 변경이나 추가사항이 발생하더라도 기존 구성요소의 수정이 아니라 확장하여 재사용할 수 있어야 함
  • 인터페이스를 구현한 클래스로 새로운 기능 구현(다형성)

 

 

L(LSP)

 

  • 리스코프 치환 원칙(Liskov Substitution Principle)
  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함
  • ex) Car 인터페이스의 엑셀 기능을 후진으로 구현하면 LSP를 위반한 것
  • 적용 방법
    • 두 객체가 같은 일을 한다면 둘을 하나의 클래스로 표현하고 이들을 구분할 수 있는 필드를 둠
    • 같은 연산을 제공하지만 이들을 약간만 다르게 한다면 공통 인터페이스를 만들고 이를 구현하도록 함
    • 공통된 연산이 없다면 별개의 클래스를 만듦
    • 두 개체가 하는 일에 추가적으로 무언가를 더 한다면 구현 상속 사용

 

 

I(ISP)

 

  • 인터페이스 분리 원칙(Interface Segragation Principle)
  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 나음
  • 자신이 사용하지 않는 인터페이스는 구현하지 말아야 함
  • 👉🏻 어떤 클래스가 다른 클래스에 종속될 때에는 최소한의 인터페이스만을 사용해야 함
  • 인터페이스가 명확해지고, 대체 가능성이 높아짐
  • ex) Car 인터페이스 - 운전 인터페이스, 정비 인터페이스로 분리
  •        User 인터페이스 - 운전자 클라이언트, 정비사 클라이언트로 분리
  •         👉🏻 분리하면 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음

 

 

D(DIP)

 

  • 의존관계 역전 원칙(Dependency Inversion Principle)
  • 프로그래머는 구체화가 아닌 추상화에 의존해야 함
  • 의존성 주입은 이 원칙을 따르는 방법 중 하나
  • 구현 클래스가 아닌 인터페이스에 의존해야 함. 그렇지 않으면 변경이 어려워짐

 

 

 

참고

'Programming > ETC' 카테고리의 다른 글

Terminal에서 ll 사용하기: command not found  (0) 2024.02.03
Contents

Copied URL!

Liked this Posting!