-
[JAVA] Dependency를 직접 Injection 하기프로그래밍 공부/Spring 2021. 4. 28. 12:42
뉴렉처 강사님의 동영상 강의를 작성한 글입니다.
Spring을 사용하지 않고 Dependency를 직접 Injection 해보는 실습
Program.java
package spring.di; import spring.di.entity.Exam; import spring.di.entity.NewlecExam; import spring.di.ui.ExamConsole; import spring.di.ui.GridExamConsole; import spring.di.ui.InlineExamConsole; public class Program { public static void main(String[] args) { Exam exam = new NewlecExam(); ExamConsole console = new InlineExamConsole(exam); // DI //ExamConsole console = new GridExamConsole(exam); console.print(); } }
Exam.java
package spring.di.entity; public interface Exam { int total(); float avg(); }
NewlecExam.java
package spring.di.entity; public class NewlecExam implements Exam { private int kor; private int eng; private int math; private int com; @Override public int total() { // TODO Auto-generated method stub return kor+eng+math+com; } @Override public float avg() { // TODO Auto-generated method stub return total()/4.0f; } }
ExamConsole.java
package spring.di.ui; public interface ExamConsole { void print(); }
GridExamConsole.java
package spring.di.ui; import spring.di.entity.Exam; public class GridExamConsole implements ExamConsole { private Exam exam; public GridExamConsole(Exam exam) { this.exam = exam; } @Override public void print() { System.out.println("[[Grid Print]]"); System.out.printf("total is %d, avg is %f\n", exam.total(), exam.avg()); } }
InlineExamConsole.java
package spring.di.ui; import spring.di.entity.Exam; public class InlineExamConsole implements ExamConsole { private Exam exam; public InlineExamConsole(Exam exam) { this.exam = exam; } @Override public void print() { System.out.printf("total is %d, avg is %f\n", exam.total(), exam.avg()); } }
출력방식을 Grid에서 Inline으로 변경하기 위해 Program.java의 소스코드를 수정해야 했다.
외부 파일을 통해 소스코드 수정 없이 DI를 변경할 수 있고
spring은 이 과정을 XML, Annotaiton을 이용하여 더욱 편리하게 지원해준다.
'프로그래밍 공부 > Spring' 카테고리의 다른 글
[Spring] IoC 컨테이너 사용하기 (ApplicationContext 이용하기) (0) 2021.04.29 [Spring] 스프링 DI 지시서 작성하기 (Spring Bean Configuration) (0) 2021.04.29 [Spring] IoC 컨테이너 (0) 2021.04.28 [Spring] DI(Dependency Injection) (0) 2021.04.28 [Spring] 느슨한 결합력과 인터페이스 (0) 2021.04.28