소프트웨어 개발에서는 유지보수성과 확장성을 고려한 설계 원칙이 중요하다. 대표적인 원칙으로는 SOLID, KISS, YAGNI가 있으며, 각각 코드의 구조를 명확하게 하고 불필요한 복잡성을 줄이는 데 도움이 된다.
SOLID 원칙
SOLID 원칙은 객체지향 프로그래밍(OOP)에서 코드의 유지보수성과 확장성을 높이기 위한 다섯 가지 설계 원칙을 의미한다.
- 단일 책임 원칙 (Single Responsibility Principle, SRP)
- 클래스는 단 하나의 책임만 가져야 한다.
- 하나의 변경 이유만 존재해야 한다.
- ✔️ 예시: 사용자 정보 처리 클래스와 로그 기록 클래스를 분리
- 개방-폐쇄 원칙 (Open/Closed Principle, OCP)
- 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.
- 새로운 기능 추가 시 기존 코드를 수정하지 않고 확장할 수 있어야 한다.
- ✔️ 예시: 인터페이스를 활용하여 새로운 기능 추가
- 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
- 하위 클래스는 상위 클래스를 대체할 수 있어야 한다.
- 상위 클래스의 기능을 변경하지 않고 확장해야 한다.
- ✔️ 예시: 부모 클래스의 기능을 유지한 채로 확장하는 방식으로 상속 구현
- 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
- 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.
- 하나의 거대한 인터페이스보다는 여러 개의 작은 인터페이스로 분리하는 것이 좋다.
- ✔️ 예시: 하나의 인터페이스를 여러 개의 역할별 인터페이스로 나누기
- 의존 역전 원칙 (Dependency Inversion Principle, DIP)
- 고수준 모듈은 저수준 모듈에 의존하면 안된다.
- 추상화에 의존해야 하며, 구체적인 구현에 의존하면 안된다.
- ✔️ 예시: 의존성 주입(DI, Dependency Injection) 활용
KISS 원칙 (Keep It Simple, Stupid)
- 코드는 단순하고 이해하기 쉽게 작성해야 한다.
- 불필요한 복잡성을 피하고, 읽기 쉬운 구조로 유지해야 한다.
- ✔️ 좋은 예: 가독성이 높은 단순한 함수 작성
- ❌ 나쁜 예: 과도한 디자인 패턴 적용으로 복잡한 코드
KISS 원칙을 지키면 코드의 유지보수성과 협업 효율이 증가한다.
YAGNI 원칙 (You Ain't Gonna Need It)
- "당장 필요하지 않은 기능은 추가하지 않는다."
- 개발 과정에서 필요할 것 같은 기능을 미리 구현하면 복잡성과 유지보수 비용이 증가할 수 있다.
- ✔️ 좋은 예: 현재 요구사항에 맞춘 최소 기능 구현
- ❌ 나쁜 예: 사용될지 모르는 기능을 미리 추가
YAGNI 원칙을 따르면 코드의 가벼움과 효율성이 유지된다.
정리
- SOLID: 객체지향 설계를 위한 5가지 원칙
- KISS: 코드는 단순하고 이해하기 쉽게
- YAGNI: 필요하지 않은 기능은 만들지 말기