기존 코드
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
테스트 코드
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContext는 AnnotationConfigApplicationContext의 상위 인터페이스
그래서 ApplicationContext는 기능이 적고, AnnotationConfigApplicationContext는 너무 많은 기능을 제공함.
우리가 개발을 할 때는 가급적 기능을 적게 제공하는 상위 인터페이스를 사용해야, 향후 구현 클래스가 변경되어도 클라이언트 코드를 변경하지 않아도 된다. 그래서 실제 스프링 애플리케이션을 개발할 때는 ApplicationContext를 사용. 그런데 스프링 코어를 설명하다보니 AnnotationConfigApplicationContext를 통해서 제공되는 기능들도 필요해서 변경한 것.