개발을 하다 보면 "나중에 이 모듈이 바뀔 수도 있다"는 불안감을 마주한다. 특정 기술이나 라이브러리에 의존하는 코드를 작성했다가, 요구사항 변경으로 인해 코드 전체를 뒤엎어야 했던 경험은 누구에게나 있다. 이 문제를 해결하기 위해 자바는 인터페이스라는 강력한 규격 시스템을 제공한다. 인터페이스가 해결하려는 문제와 그 진화 과정, 그리고 다형성을 통한 설계의 유연성에 대해 정리한다.1. 문제 상황: 구체적인 것에 의존하다온라인 쇼핑몰의 결제 시스템을 개발한다고 가정한다. 초기 요구사항은 '신용카드' 결제만 지원하는 것이었다. 개발자는 별다른 고민 없이 CreditCard 클래스를 만들고, 주문 로직에서 이를 직접 가져다 썼다.// 구체 클래스public class CreditCard { public..