DI를 해야 클라이언트 코드 변경없이 기능을 확장할 수 있다. 인터페이스를 다 설계하고 구현체를 구현할때 장점 - 개발환경 설정 안하고 인터페이스 먼저 구현해도 개발 가능! - 인터페이스를 먼저 만들어놓으면 하부 구현기술 선택을 최대한 미룰수 있는 장점이있다 - 구체적으로 정해지지 않아도 간단한 인터페이스만들고 간단한 구현체 만들고 개발 가능 - 이런식으로 인터페이스를 먼저 설계하면 가능함 - 구현 기술이 바뀌더라도 나머지 코드를 바꿀 필요없어서 변경의 범위가 작고 유연함 인터페이스를 무분별하게 남발하면 추상화라는 비용 발생 - 추상화가 되버리면 개발 코드를 한번더 열어봐야함 이런 단점도 있음... - 그래서 장점이 단점을 넘어설때 채택해야함. - 이런걸 잘 고민하고 설계하는게 경험 많고 좋은 아키텍처들..