파게로그

Spring 없이 직접 DI를 한다면? Spring의 역할 본문

콤퓨타 왕기초/Spring

Spring 없이 직접 DI를 한다면? Spring의 역할

파게 2021. 4. 14. 00:49

admin.school.Program

package admin.school; import admin.school.entity.Exam; import admin.school.entity.MidTermExam; import admin.school.ui.ExamConsole; import admin.school.ui.InlineExamConsole; import admin.school.ui.TableExamConsole; public class Program { public static void main(String[] args) { ‌‌Exam exam = new MidTermExam(60, 70, 40, 80); ‌‌ ‌‌ExamConsole inlineExamConsole = new InlineExamConsole(exam); // DI ‌‌inlineExamConsole.print(); } }

 

admin.school.entity.Exam

package admin.school.entity; public interface Exam { int sum(); double avg(); }

 

admin.school.entity.MidTermExam

package admin.school.entity; public class MidTermExam implements Exam { int kor; int eng; int math; int com; public MidTermExam(int kor, int eng, int math, int com) { ‌‌this.kor = kor; ‌‌this.eng = eng; ‌‌this.math = math; ‌‌this.com = com; } @Override public int sum() { ‌‌return kor + eng + math + com; } @Override public double avg() { ‌‌return (kor + eng + math + com) / 4.0; } }

 

admin.school.ui.ExamConsole

package admin.school.ui; import admin.school.entity.Exam; public interface ExamConsole { void print(); void setExam(Exam exam); }

 

admin.school.ui.InlineExamConsole

package admin.school.ui; import admin.school.entity.Exam; public class InlineExamConsole implements ExamConsole { ‌Exam exam; public InlineExamConsole() { } public InlineExamConsole(Exam exam) { ‌‌this.exam = exam; } @Override public void print() { ‌‌System.out.printf("Sum: %d, Avg: %.2f\n", exam.sum(), exam.avg()); } @Override public void setExam(Exam exam) { ‌‌this.exam = exam; } }

 

admin.school.ui.TableExamConsole

package admin.school.ui; import admin.school.entity.Exam; public class TableExamConsole implements ExamConsole { ‌Exam exam; public TableExamConsole() { } public TableExamConsole(Exam exam) { ‌‌this.exam = exam; } @Override public void print() { ‌‌System.out.printf("┌─────┬──────────┐\n"); ‌‌System.out.printf("│ Sum │ %5d │\n", exam.sum()); ‌‌System.out.printf("│ Avg │ %5.2f │\n", exam.avg()); ‌‌System.out.printf("└────────────────┘\n"); } @Override public void setExam(Exam exam) { ‌‌this.exam = exam; } }

 

그런데, InlineExamConsole을 사용하고 있는 지금, 만약 GridExamConsole을 새로 만들었다면 어떻게 해야 할까? 우리는 코드를 수정하지 않고서도 객체를 생성하는 부분을 바꿀 수 있어야 한다. 이 때 해당 바꾸는 부분들을 외부 설정 파일로 따로 작성하고 설정하는 것을 Spring이 도와준다.

Comments