SOLID 원칙은 객체지향 설계 5원칙이라고도 불리며, 각 원칙의 앞글자를 따서 만들어졌다. SOLID 원칙은 객체지향 프로그래밍에서 개발 생산성을 높일 수 있으며 객체지향 설계의 핵심인 의존성 관리를 위해 준수해야하는 원칙이다.
SOLID 원칙을 지킴으로서 다음과 같은 이점을 얻을 수 있다.
- 코드의 유지보수성 향상
- 확장성 있는 설계 가능
- 재사용 가능한 컴포넌트 구성 가능
- 복잡성을 감소시켜 개발 생산성 향상
각각의 원칙을 하나씩 살펴보자.
1. SRP (Single Responsibility Principle, 단일 책임 원칙)
SRP는 Single Responsibility Principle의 약자로 단일 책임 원칙을 의미한다. SRP는 한 클래스는 하나의 책임만 가져야한다는 원칙이다. 따라서 클래스는 오직 하나의 목적이나 이유로만 변경되어야한다.
만약, 하나의 클래스에 여러 목적이 있다면 변경이 일어날 때 연쇄적으로 수정해야할 코드가 많아질 수 있다.
2. OCP (Open-Closed Principle, 개방-폐쇄 원칙)
OCP는 Open-Closed Principle의 약자로 개방-폐쇄 원칙을 의미한다. OCP는 확장에는 열려있으나 변경에는 닫혀있어야함을 의미한다. 즉, 객체지향 언어의 특징인 다형성을 의미한다. 여기서 개방이란 새로운 타입을 추가함을 의미하며 폐쇄는 확장할 때에 상위 레벨이 영향을 받지 않아야함을 말한다. 추상 클래스와 상속을 생각하면 된다.
3. LSP (Liskov Substitution Principlee, 리스코프 치환 원칙)
LSP는 Liskov Substitution Principle의 약자로 리스코프 치환 원칙을 의미한다. LSP는 서브 타입은 언제나 상위 타입으로 교체할 수 있다는 의미이다. 따라서 부모 쪽으로 업캐스팅할때 안전함을 보장할 수 있다. 이 또한 다형성을 이용하기 위한 원칙이다.
LSP를 잘 나타내는 예로서 Java의 Collection 타입이 있다. LinkedList를 사용하다 HashSet으로 바꿔도 add() 메서드가 의도되로 잘 동작한다. 조심해야할 사항으로는 상위 타입의 목적과 의도에 맞게 하위 타입에 잘 반영해야한다는 것이다.
4. ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
ISP는 Interface Segregation Principle의 약자로 인터페이스 분리 원칙을 의미한다. ISP는 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다는 원칙이다. 즉, 사용되지 않는 것은 범용 인터페이스에 포함하지 않고 의존성을 분리하여 여러 개로 나누는 것이 좋다는 것이다. 쉽게 이야기하면, SRP가 클래스의 단일 책임에 대한 원칙이었다면 ISP는 인터페이스의 단일 책임에 대한 원칙이라고 보면 된다.
5. DIP (Dependency Inversion Principle, 의존관계 역전 원칙)
DIP는 Dependency Inversion Principle의 약자로 의존관계 역전 원칙을 의미한다. DIP는 추상화에 의존해야지 구체화에 의존하면 안된다는 원칙이다. 인터페이스에 의존하고 구현 클래스에 의존하지 말아야 유연하게 구현체 변경이 가능하기 때문이다. 구현 클래스는 자주 변경될 수 있기 때문에 변경이 없는 것에 의존하는 것이 좋다. 이를 통해 각 클래스 간의 결합도를 낮출 수 있다.
'Spring Boot' 카테고리의 다른 글
[Spring] 효율적인 패키지 구조와 네이밍 컨벤션 (0) | 2025.03.27 |
---|---|
[Spring] Spring Bean이란? (0) | 2025.03.06 |
[Spring] Resilience4j를 통한 Circuit Breaker 패턴 적용 - (2)적용 (0) | 2025.01.15 |
[Spring] Resilience4j를 통한 Circuit Breaker 패턴 적용 - (1)개념 (0) | 2024.12.28 |
[Spring] Redis를 이용한 대기열 관리 (0) | 2024.12.28 |