인터페이스를 사용하는 일반적인 이유는 인터페이스가
(OCP, Open-Closed principle)
을 지키기 때문이다.이 두 가지 이유 모두 오해다.
단일 구현을 위한 인터페이스는 추상화가 아니며 🙅, 해당 인터페이스를 구현하는 구체 클래스보다 결합도가 낮지 않다.
진정한 추상화는 발견하는 것이지, 발명하는 것이 아니다.
의미상 추상화가 이미 존재하지만 코드에서 아직 명확하게 정의되지 않았을 때 그 이후에 발견되는 것이다.
따라서 인터페이스가 진정으로 추상화되려면 구현이 적어도 두 가지는 있어야 한다.
두 번째 이유는 더 기본적인 원칙인 YAGNI(You aren't gonna need it)
를 위반하기 때문에 잘못된 생각이다.
YAGNI는 현재 필요하지 않은 기능에 시간을 들이지 말라는 것이다. ⏳
이러한 향후 기능이 어떤지 설명하려고 기능을 개발해서도, 기존 코드를 수정해서도 안 된다.
크게 두 가지 이유가 있다.
코드를 작성하는 것은 문제를 해결하는 값비싼 방법이다. 해결책에 필요한 코드가 적고 간단할수록 더 좋다.
(ex: SMTP 서버, 메시지 버스)
만 목으로 처리하므로, 결국 비관리 의존성에 대해서만 인터페이스를 쓰라는 지침이 된다.