프로그래밍 공부/Spring
[JAVA] Dependency를 직접 Injection 하기
valid_ming
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을 이용하여 더욱 편리하게 지원해준다.