ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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을 이용하여 더욱 편리하게 지원해준다.

    댓글

Designed by Tistory.