로버트 C. 마틴(로버트 C. 마틴)은 소프트웨어 개발 분야에서 유명한 인물로, SOLID 원칙을 정립한 것으로 널리 알려져 있습니다. SOLID 원칙은 객체 지향 설계의 5가지 주요 원칙으로, 소프트웨어 시스템의 유지보수성과 확장성을 높이기 위한 가이드라인을 제공합니다.
SOLID 원칙은 객체 지향 설계의 핵심 원칙으로, 소프트웨어 시스템을 더 모듈화하고, 유지보수하기 쉽게 만들기 위해 고안되었습니다. 로버트 C. 마틴은 이 원칙들을 통해 개발자들이 더 좋은 소프트웨어를 작성할 수 있도록 돕고자 했습니다. 이 원칙들을 준수하면, 코드의 재사용성, 확장성, 유지보수성이 크게 향상됩니다.
SOLID 원칙
단일 책임 원칙 (Single Responsibility Principle, SRP)
클래스는 하나의 책임만 가져야 하며, 클래스는 그 책임을 완전히 캡슐화해야 합니다.
- 설명: 클래스가 하나의 기능만 담당해야 하고, 변경이 필요한 이유는 오직 하나여야 한다는 의미입니다. 이를 통해 클래스가 작고, 명확하게 정의되며, 유지보수하기 쉬워집니다.
- 예시: 데이터베이스 접근과 UI 로직을 같은 클래스에서 처리하지 않고, 각각의 클래스로 분리합니다.
개방-폐쇄 원칙 (Open/Closed Principle, OCP)
소프트웨어 요소는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다.
- 설명: 새로운 기능을 추가할 때 기존 코드를 수정하지 않고도 확장이 가능해야 합니다. 이를 위해 인터페이스와 추상 클래스를 활용해 확장을 가능하게 합니다.
- 예시: 새로운 기능을 추가할 때, 기존 클래스를 수정하지 않고도 새로운 클래스를 작성하여 기능을 확장할 수 있도록 인터페이스를 설계합니다.
리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
서브타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 합니다.
- 설명: 하위 클래스는 상위 클래스의 기능을 그대로 사용할 수 있어야 하고, 하위 클래스는 상위 클래스와 호환되어야 합니다. 즉, 하위 클래스는 상위 클래스의 계약을 준수해야 합니다.
- 예시: 상위 클래스가 정의한 메서드의 동작을 변경하지 않도록 하위 클래스를 설계합니다. 예를 들어, 상위 클래스의 메서드가 예외를 발생시키지 않는다면, 하위 클래스에서도 동일하게 동작해야 합니다.
인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫습니다.
- 설명: 클라이언트는 자신이 이용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리해야 한다는 원칙입니다. 이를 통해 인터페이스를 작고 구체적으로 만들어서, 클라이언트가 불필요한 메서드에 의존하지 않게 합니다.
- 예시: 하나의 거대한 인터페이스 대신, 클라이언트의 요구에 맞춘 작은 인터페이스 여러 개로 분리합니다.
의존성 역전 원칙 (Dependency Inversion Principle, DIP)
고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 이 둘 다 추상화에 의존해야 합니다. 추상화는 구체적인 것에 의존해서는 안 됩니다.
- 설명: 의존성 주입을 통해 모듈 간의 의존성을 줄이고, 인터페이스나 추상 클래스를 통해 의존성을 역전시켜야 합니다. 이를 통해 유연하고 테스트하기 쉬운 시스템을 만들 수 있습니다.
- 예시: 구체적인 클래스 대신 인터페이스에 의존하도록 코드를 작성하여, 구현체를 쉽게 교체할 수 있도록 합니다.