SOLID란?
이 포스팅에서는 객체지향 프로그래밍의 핵심적인 원칙인 SOLID에 대해 알아보겠다. SOLID는 단일 책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 리스코프 치환 원칙(LSP), 인터페이스 분리 원칙(ISP), 의존성 역전 원칙(DIP)의 첫 글자를 따서 만든 약어다. 이 원칙들을 통해 더 효율적이고 관리하기 쉬운 코드를 작성하는 데 도움이 된다.
이 글에서는 보다 이해가 편하도록 비유를 해가며 설명해보도록 하겠다.
내가하는 비유가 적절하고 정확한 비유는 아닐 수 있으나 대충 이런 느낌이구나~ 정도로만 이해해주면 감사할 것 같다!
단일 책임 원칙(SRP)
단일 책임 원칙은 하나의 클래스가 하나의 책임만을 가져야 한다는 원칙이다.
즉, 모든 클래스는 하나의 기능만을 구현하도록 설계되어야 한다.
이 원칙을 따르면 클래스가 자신의 책임을 충실히 수행하는 데 집중할 수 있으므로
코드의 가독성을 높이고, 유지 보수를 용이하게 한다.
- 자동차의 각 부품을 생각해보자. 예를 들어, 자동차의 엔진은 자동차를 움직이게 하는 기능만을 수행한다.
- 브레이크는 차량을 멈추게 하는 기능만을 수행한다. 즉, 각 부품은 각각 하나의 책임만을 가지고 있다.
- 즉, 각 클래스(자동차의 각 부품)는 단 한 가지의 기능만을 수행하도록 설계되어야 한다는 원칙.
개방-폐쇄 원칙(OCP)
개방-폐쇄 원칙은 "소프트웨어 구성요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고,
수정에는 닫혀 있어야 한다."라는 원칙이다.
즉, 기존의 코드를 변경하지 않고도 기능을 추가하거나 변경할 수 있어야 한다.
이 원칙을 따르면 기존 코드를 건드리지 않고도 새로운 기능을 추가하거나 기존 기능을 변경할 수 있어,
코드의 안정성을 높이고 버그의 발생 가능성을 줄일 수 있다.
- 자동차의 엔진을 생각해보자. 제조사는 엔진을 교체하거나 업그레이드 할 수 있도록 엔진을 설계한다.
- 이는 자동차의 다른 부분들, 예를 들어 바퀴나 브레이크 등에는 영향을 끼치지 않으면서 새로운 엔진을 추가하거나 기존의 엔진을 업그레이드할 수 있게 해준다.
- 즉, 기존 코드(자동차의 다른 부분들)를 변경하지 않고도 새로운 기능(새로운 엔진)을 추가하거나 기존 기능(기존의 엔진)을 변경할 수 있어야 한다는 원칙
리스코프 치환 원칙(LSP)
리스코프 치환 원칙은 "서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다."라는 원칙이다.
즉, 하위 클래스는 상위 클래스의 역할을 완벽하게 대체할 수 있어야 한다.
이 원칙을 따르면 다형성을 이용하여 코드의 유연성을 높이고, 클래스의 재사용성을 높일 수 있다.
- 이 원칙은 자동차의 부품을 생각해볼 수 있다. 예를 들어, 특정 모델의 자동차에 대한 부품은 다른 모델의 자동차에도 적용될 수 있어야 한다.
- 즉, 하위 부품(서브타입)은 상위 부품(기반 타입)의 역할을 완벽하게 대체할 수 있어야 한다는 원칙.
인터페이스 분리 원칙(ISP)
인터페이스 분리 원칙은 "클라이언트는 이를 이용하지 않는 메서드에 의존할 필요가 없다."는 원칙이다.
구체적인 기능을 수행하는 여러 인터페이스가 하나의 일반적인 인터페이스보다 낫다는 것을 의미한다.
이 원칙을 따르면 클래스는 필요하지 않은 메서드를 구현하는 데 시간을 낭비하지 않아도 되므로, 코드의 효율성을 높일 수 있다.
- 자동차의 조작 패널을 생각해보자. 운전자는 자신이 필요로 하는 기능만을 보여주는 패널을 사용해야 한다.
- 예를 들어, 비행기 조종사가 필요로 하는 복잡한 계기판을 일반 운전자에게 주어서는 안 된다. 이는 "클라이언트는 이를 이용하지 않는 메서드에 의존할 필요가 없다."는 원칙을 나타낸다.
의존성 역전 원칙(DIP)
의존성 역전 원칙은 "고수준 모듈은 저수준 모듈에 의존하면 안 된다.
둘 다 추상화에 의존해야 한다."는 원칙이다.
즉, 소프트웨어의 구성요소 사이의 의존 관계가 소스 코드 수준에서 결정되는 것이 아니라
추상화된 설계 단계에서 결정되어야 한다. 이 원칙을 따르면 코드의 구조가 유연해지고, 변경에 더 강건해진다.
- 이 원칙은 자동차의 설계를 생각해보면 이해하기 쉽다. 예를 들어, 자동차의 디자인이나 성능은 자동차의 부품에 의존하지 않는다. 대신, 부품은 자동차의 설계에 맞춰 제작되어야 한다.
- 즉, "고수준 모듈은 저수준 모듈에 의존하면 안 된다. 둘 다 추상화에 의존해야 한다."는 원칙.
결론
SOLID 원칙은 객체지향 프로그래밍의 핵심 원칙이다. 이 원칙들을 잘 이해하고 적용하면 코드의 가독성, 유지보수성, 확장성, 안정성을 높일 수 있다. 객체지향의 원칙은 단순히 코드를 작성하는 방법을 넘어서 설계에 대한 핵심 원리를 제공하므로, 좋은 소프트웨어를 만드는 데 있어 필수적인 요소이다.
'IT' 카테고리의 다른 글
Spring 웹 애플리케이션 마이그레이션: 파일 권한 문제 해결기 (0) | 2024.12.06 |
---|---|
팀 프로젝트 회고 [Pet Hub] (0) | 2024.06.26 |
팀 프로젝트 회고 [Smart Farm] (0) | 2024.06.26 |
MVC 패턴의 낯선 세계 (0) | 2024.04.10 |
CORS 에러에 대해 알아보자 (0) | 2024.04.01 |