회사에서 오랫동안 고여있어서 연차가 '시니어' 위치에 있지만 'SOLID' 클래스 설계 원칙을 제대로 읽어본 적은 없는것 같다. 블로그 이름에 걸맞는 상태 ㅠㅠ 이제라도 찾아 읽어보자.
"로버트 마틴(Robert C. Martin) 아저씨가 고안한 원칙(요런거 알면 어디가서 아는 '척' 하기 좋다;;)
위 내용만 보고 이해가 안되니 다른 책을 더 찾아보자!
SRP (Single Responsibility Principle)
"클래스는 작고 한 가지 역할에만 충실하고 응집력이 높아야 한다."
"개별 메서드도 짧고 간결해져서 이를 검증하는 테스트의 복잡도도 같이 낮아진다."
OCP (Open Closed Principla)
"코드 수정 없이도 클래스의 기능을 변경할 수 있도록 하자는 애기"
"전략 패턴이 대표적인 예"
LSP (Liskov Substitution Principle)
"바바라 리스코프"라는 분이 소개한 내용.
너무.. 당연한 이야기;; 위반하게 만들려면 어떻게해야하지???
ISP (Interface Segregation(=분리) Principla)
"인터페이스는 작고 한 가지 목적에 충실하도록 만들어야 한다"
"단일책임원칙(SRP) 의 인터페이스 버전"이라 부르기도 한단다."
스프링에서 이런 코드를 많이 본듯 AuthenticatedPrincipal.java 처럼 단순한 인터페이스.
public interface AuthenticatedPrincipal {
/**
* Returns the name of the authenticated <code>Principal</code>. Never
* <code>null</code>.
* @return the name of the authenticated <code>Principal</code>
*/
String getName();
}
DIP (Dependency Inversion Principle)
"코드는 구현체가 아닌 추상 개념에 종속되어야 한다"는 원칙.
"클래스는 협력 객체를 직접 생성하지 말고 인터페이스로 건네받아야 한다"
ㄴ Setter 로 받아도 괜찮겠지?
"테스트 용이성이 크게 좋아짐"
훌룡한 내용이다 이걸.. 이제 제대로 찾아보다니 🤦♂️
참고서적
- Effective Unit Testing (대부분 여기서)
- 자바와 JUnit 을 활용한 실용주의 단위 테스트
- Head First Design Patterns