서로 다른 사용자가 같은 클래스의 서로 다른 메서드에 의존한다고 할 때,
메서드 하나를 변경하면 그에 의존하지 않는 사용자들도 다시 컴파일하게 됨.
이때 의존하는 메서드들을 인터페이스로 나눠버리면
의존하고 있는 메서드를 바꿨을 때만 다시 컴파일되고 재배포됨.
정적 타입 언어는 소스 코드에 포함된 included 선언문으로 인해 의존성이 발생한다.
루비나 파이썬 같은 동적 타입 언어에서는 소스 코드에 이러한 선언문이 존재하지 않는다.
대신 런타임에 추론이 발생하기 때문에, 의존성도 없고, 재컴파일과 재배포도 필요없다.
자바, C# 등은 late binding으로 private이 아닌 객체는 시그니처를 변경하면 의존하는 코드만,
구현 코드만 변경됐다면 그것도 재컴파일 필요 없어짐.
즉, ISP는 언어 종류에 따라 영향받는 정도가 다름.
아키텍처 수준에서도 ISP는 중요하다.
필요 이상으로 많은 걸 포함하는 모듈에 의존하는 건 해로운 일이다.
의존하던 프레임워크의 불필요한 기능 때문에 문제가 발생하거나 재배포를 해야 할 수도 있기 때문.
유연성이 극대화된 시스템이란,
소스 코드 의존성이 추상에 의존하며 구체에는 의존하지 않는 시스템.
규칙이라고 보기는 현실적이지 않다.
하지만 변동성이 큰 구체적 요소는 의존하지 않도록 해야 한다.
그것은 열심히 개발 중이라 자주 변경되는 모듈들을 의미한다.
인터페이스는 변동성이 낮아야 한다.
가급적 인터페이스를 변경하지 않고도 구현체에 기능을 추가하도록 노력해야 한다.
구체적 실천법
구체적 의존성을 완전히 없애는 건 불가능하다.
팩토리를 쓴다거나 해서 줄일 순 있다.
깃허브 레포 등록
creator kit fps 코드 보고 배우기
god 시점 구현
god controller 시점 변환 디버그 코드

https://www.youtube.com/watch?v=w7i4amO_zaE
C:\Users\사용자명\AppData\Local