SOLID 원칙

이름·2023년 7월 10일

SOLID

: 객체 지향 설계의 다섯 가지 원칙을 나타내는 약어입니다.

이 원칙들은 유지 보수 가능하고 확장 가능한 소프트웨어를 개발하기 위한 가이드라인으로서 많은 소프트웨어 개발자들에 의해 따르고 있습니다.

SRP (Single Responsibility Principle, 단일 책임 원칙):

하나의 클래스는 단 하나의 책임을 가져야 합니다.
클래스가 여러 개의 책임을 가지면 변경사항이 발생했을 때 다른 책임에 영향을 줄 수 있으므로 유지 보수와 확장이 어려워집니다.
클래스를 단일 기능 또는 책임으로 유지하면 코드의 가독성, 유지 보수성, 재사용성이 향상됩니다.

OCP (Open-Closed Principle, 개방 폐쇄 원칙):

소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 합니다.
새로운 기능을 추가할 때는 기존 코드를 수정하지 않고 확장 가능한 방식으로 추가해야 합니다.
인터페이스, 추상화, 다형성 등을 활용하여 코드를 추상화하고, 변하는 부분과 고정된 부분을 분리합니다.

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

상위 타입은 하위 타입으로 대체 가능해야 합니다.
즉, 기존의 클래스를 상속하거나 인터페이스를 구현하는 경우에는 해당 타입을 사용하는 코드에서 변화 없이 상속 또는
구현된 클래스를 사용할 수 있어야 합니다.
이를 통해 다형성을 지원하고 코드의 재사용성과 유연성을 높일 수 있습니다.

ISP (Interface Segregation Principle, 인터페이스 분리 원칙):

클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 합니다.
인터페이스는 클라이언트의 요구에 딱 맞는 작은 단위로 분리되어야 합니다.
이를 통해 인터페이스의 명확성과 응집도를 높이고, 결합도를 낮출 수 있습니다.

DIP (Dependency Inversion Principle, 의존 역전 원칙):

추상화된 것은 구체적인 것에 의존하면 안 됩니다. 구체적인 것은 추상화된 것에 의존해야 합니다.
즉, 상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 되며, 양쪽 모두 추상화된 인터페이스에 의존해야 합니다.
이를 통해 모듈 간의 결합도를 낮출 수 있고, 유연성과 재사용성을 향상시킬 수 있습니다.
구체적인 구현에 의존하는 코드는 변경이 발생하면 해당 코드를 수정해야 하지만, 추상화된 인터페이스에 의존하는 코드는 변경에 영향을 받지 않고 동작할 수 있습니다.
ex)
의존 관계 주입(Dependency Injection)을 통해 DIP를 실현할 수 있습니다.
의존하는 객체를 직접 생성하고 관리하는 대신, 외부에서 의존 객체를 주입하여 의존성을 역전시킵니다.
이를 통해 코드의 테스트 용이성을 높일 수 있고, 객체 간의 결합도를 낮추어 유지 보수성을 개선할 수 있습니다.

0개의 댓글