SRP의 핵심 개념
각 클래스는 단 하나의 책임만 가져야 한다.
라는 단순한 개념으로 생각하고 있었으나. 그 밑에 한줄 더 있던 것을 기억해내야한다.
클래스가 변경될 이유는 오직 하나만 있어야 한다.
단순하게 하나의 클래스는 하나의 책임을 진다고 생각하였을떄,
책임이란 무엇인지에 대해 잘못 고민하게되면 "기능" 으로 오해하기 쉽다는 것을 알게됨
그런식이라면 한클래스에 한줄이나 있겠다 야~ 싶어서 다시 이야기 나눈 결과
"클래스가 변경될 이유는 오직 하나만 있어야한다"
라는 기준으로 다시 생각해보면 헷갈리던 것들이 조금더 선명하게 보이게 되었다.
오늘의 목표
- 객체지향적 감각 (SRP 적용)
- 클린 코드 사고
- 실무 중심 검색 기능 설계
✍️ 기능 정의
- 사용자가 "도서 제목"을 입력한다.
- 시스템이 해당 제목을 포함하는 책을 찾아 보여준다.
SRP 기반 책임 분리
| 역할 | 책임 |
|---|
| UI | 입력 수집, 결과 출력 |
| BookSearchCondition | 검색 조건 데이터 객체 (nullable 허용) |
| BookSearchService | 검색 실행 및 결과 정렬 |
BookSearchCondition 설계
- title: String (nullable)
- author: String (nullable)
- publishYear: Integer (nullable)
- genre: String (nullable)
→ 모든 필드는 선택적 입력을 허용한다.
BookSearchService 흐름
- BookSearchCondition을 입력받는다.
- 조건이 비어 있으면 전체 목록 반환.
- 조건이 있으면 필터링 후 정렬하여 반환.
철학 요약
"한 클래스는 하나의 이유로만 변경되어야 한다."
- 책임은 기능 흐름이 아니라 변경 이유로 구분한다.
- 검색 조건은 유연성을 최우선으로 설계한다.
- 필수값 검증은 비즈니스 규칙에 맡긴다.
오늘의 한 줄 요약
"SRP는 클래스 줄 수가 아니라, 변경 이유를 본다."