인프런 김영한 강의와 자료를 토대로 부분적으로 요약했단 점 참고바랍니다. 앞 글에서 좋은 객체 지향 설계의 원칙 5가지(SOLID)를 지키기 위해 역할(인터페이스)과 구현(클래스)을 분리했다. 그렇지만 구현체를 바꿀 때 마다 코드 수정으로 인해 OCP 위반과 구현체(클래스)에 의존하므로 DIP 위반을 일어난다. DIP를 지키기 위해 위 처럼 코드를 변경한다 하더라도 구현체가 없으므로 NPEE(null pointer exception)가 발생한다. 이 문제를 해결하기 위해 관심사를 분리한다. 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스(AppConfig)를 만들면 생성자를 통해 주입해줘 OCP와 DIP를 지킬 수 있다. IoC, DI, 컨테이너 제어의 역전 IoC(Inversion o..