하나의 변경 이유만 가진다.
SOLID
SOLID와 타입 경계
원칙을 외우기보다 클래스와 인터페이스가 왜 바뀌는지, 의존성이 어느 방향으로 흐르는지 확인한다.
확장에는 열고 수정에는 닫는다.
하위 타입이 상위 계약을 깨지 않는다.
큰 인터페이스를 역할별로 나눈다.
구현보다 추상에 의존한다.
추상화 안정성: 타입을 추가할수록 코드가 덜 흔들리면
유효한 추상화이고, 더 많은 수정이 필요하면 경계가 잘못된 것이다.