포스트

[OOP] 객체지향 프로그래밍의 5가지 설계 원칙, SOLID

SOLID 는 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙입니다.

  • SRP (단일 책임 원칙)
  • OCP (개방-폐쇄 원칙)
  • LSP (리스코프 치환 원칙)
  • ISP (인터페이스 분리 원칙)
  • DIP (의존 역전 원칙)

위의 5가지의 앞 글자를 합쳐 만들어 진 것이 SOLID 입니다.
SOLID를 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 개발에 도움이 됩니다.

단일 책임 원칙 (Single Responsibility Principle)

“모듈은 여러 대상 또는 액터들에 대해 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야 한다.”

한 모듈이 여러 액터에 대해 책임을 가지고 있다면
여러 액터들에게서 오는 변경 요구에 의해 해당 모듈의 수정사항이 여러 개가 될 수 있다.

예를들어, 한 클래스가 여러 기능을 담고 있을 때
클래스 멤버 변수를 수정하려면 해당 클래스의 기능들에서도 모두 수정을 해줘야 한다.

이러한 문제점을 해결하고자 책임과 관심이 다른 코드를 분리하고
서로 영향을 주지 않도록 추상화함으로써 변경이 필요할 때, 수정할 대상이 명확해지도록 해야한다.

개방 폐쇠 원칙 (Open-Closed Principle)

“확장에 대해 열려있고, 수정에 대해 닫혀있어야 한다.” 라는 원칙이다.
요구사항이 변경될 때 새로운 동작을 추가하여 기능을 확장할 수 있는 것이 확장에 대한 열림이다.

그리고 기존 코드를 수정하지 않고 동작을 추가하거나 변경할 수 있는 것이 수정에 대한 닫힘이다.

OCP의 본질은 추상화이며, 이는 결국 런타임 의존성과 컴파일타임 의존성에 대한 이야기다.
(런타임 의존성과 컴파일타임 의존성은 반드시 알아야하는 개념)

인터페이스 분리 원칙 (Interface Segregation Priciple)

“클라이언트의 목적과 용도에 적합한 인터페이스만 제공” 이라는 원칙이다.
클라이언트에 따라 인터페이스를 분리 하여 더욱 세밀하게 제어할 수 있다.

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

자식 클래스는 부모 클래스와 치환될 수 있어야 한다는 원칙이다.
자식 클래스를 설계할 때, 부모 클래스와 치환될 수 있도록
부모 클래스의 클라이언트 가정(동작 구조)를 자식 클래스도 지켜야 한다.

의존 역전 원칙 (Dependency Inversion Principle)

고수준 모듈은 저수준 모듈 구현에 의존하면 안되고, 저수준 모듈은 고수준 모듈에 의존해야 한다.

고수준 모듈이란 I/O와 먼 추상화된 모듈이고 저수준 모듈이란 I/O와 가까운 구현 모듈이다.

의존 역전 원칙은 개방 폐쇄 원칙과 밀접한 관계에 있어 한 쪽이 위배될 경우
나머지 하나도 위배되는 경우가 있으니 주의해야 한다.

출처

[OOP] 객체지향 프로그래밍의 5가지 설계 원칙, 실무 코드로 살펴보는 SOLID

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.