본문 바로가기
Spring Study

SOLID(객체 지향 설계 원칙)

by xogns93 2024. 8. 5.

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

 

ArticleS.UncleBob.PrinciplesOfOod

The Principles of OOD What is object oriented design? What is it all about? What are it's benefits? What are it's costs? It may seem silly to ask these questions in a day and age when virtually every software developer is using an object oriented language

butunclebob.com

SOLID는 객체 지향 프로그래밍에서의 다섯 가지 원칙을 의미합니다. 이러한 원칙들은 소프트웨어 디자인의 품질을 높이고 유지보수성과 확장성을 향상시키는 데 중요한 역할을 합니다.


다음은 SOLID의 각 원칙에 대한 설명입니다.

SRP The Single Responsibility Principle A class should have one, and only one, reason to change
OCP The Open Closed Principle You should be able to extend a classes behavior, without modifying it.
LSP The Liskov Substitution Principle Derived classes must be substitutable for their base classes.
ISP The Interface Segregation Principle Make fine grained interfaces that are client specific.
DIP The Dependency Inversion Principle Depend on abstractions, not on concretions.
  1. SRP (Single Responsibility Principle) SRP는 단일 책임 원칙이라고도 불리며, 모든 클래스는 하나의 책임만 가지고 있어야 한다는 원칙입니다. 클래스가 단일 책임을 가지고 있다면, 해당 클래스를 변경해야 할 경우 다른 클래스에 영향을 덜 미칠 가능성이 높아집니다. 클래스가 변경되어야 하는 이유는 하나뿐이어야 한다는 원칙입니다. 
  2. OCP (Open-Closed Principle)
    OCP는 개방-폐쇄 원칙이라고도 불리며, 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있으나 수정에는 닫혀 있어야 한다는 원칙입니다. 즉, 소프트웨어 개체는 새로운 요구사항이나 기능 추가 등 확장이 필요할 경우 수정 없이도 쉽게 확장할 수 있도록 설계되어야 합니다.
  3. LSP (Liskov Substitution Principle)
    LSP는 리스코프 치환 원칙이라고도 불리며, 자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 한다는 원칙입니다. 즉, 부모 클래스가 정의한 기능을 자식 클래스가 올바르게 대체할 수 있어야 합니다.
  4. ISP (Interface Segregation Principle)
    ISP는 인터페이스 분리 원칙이라고도 불리며, 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다는 원칙입니다. 즉, 하나의 인터페이스가 너무 많은 메서드를 가지고 있지 않도록, 클라이언트가 필요한 메서드만 포함하도록 인터페이스를 분리해야 합니다.
  5. DIP (Dependency Inversion Principle)
    DIP는 의존성 역전 원칙이라고도 불리며, 추상화에 의존해야 하며, 구체화에 의존하지 않아야 한다는 원칙입니다. 즉, 추상화를 통해 의존성을 역전시키고, 구체화를 숨기는 것으로, 유연하고 확장 가능한 소프트웨어를 만들 수 있습니다.

SOLID는 소프트웨어 개발자가 이러한 원칙들을 지키면, 코드의 유지보수성과 확장성이 높아지며, 결합도와 응집도가 개선되어 코드 품질이 향상됩니다. 이는 장기적으로 프로젝트의 성공과 생산성을 향상시키는 데 도움이 됩니다.

SOLID는 객체 지향 설계 원칙 중에서 가장 대표적인 것으로, 많은 소프트웨어 개발자들이 이를 적극적으로 활용하여 유지보수성이 높은 코드를 작성하고 있습니다. SOLID를 잘 이해하고 활용하는 것은 좋은 개발자로 성장하는 데 큰 도움이 될 것입니다.