Spring #05 DI 직접하기

underlier12·2020년 2월 9일
0

SPRING

목록 보기
5/25

05. DI 직접하기

자바 프로젝트 예제

이번에는 스프링의 도움없이 DI를 직접 해보고 추후에 스프링을 활용해본다. 먼저 자바 프로젝트를 생성한다.(Java Perspective로 변환)

image.png

메인이 되는 프로그램 파일이 서비스 파일이 되고 여기서 DI가 이루어진다. 직접 DI가 이루어진 형태이다. 인터페이스로 구현이되어 어느정도 결합력이 약해진 상태이지만 그래도 InlineExamConsole과 GridExamConsole을 교체하며 사용하기에는 번거롭다.

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);
//		ExamConsole console = new GridExamConsole(exam);
		console.print();
	}

}

Exam.java

package spring.di.entity;

public interface Exam {
	public int total();
	public float avg();
}

인터페이스 형식으로 작성된 Exam을 구현하는 Newlec Exam 클래스이다.

NewlecExam

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;
	}

}

Exam의 결과를 출력하는 ui 역할을 하는 ExamConsole 인터페이스이며 InlineExamConsole와 GridExamConsole에서 각기 다르게 구현한다.

ExamConsole.java

package spring.di.ui;

public interface ExamConsole {
	void print();
}

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());
	}

}

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(" total  |  avg  ");
		System.out.printf(" %3d  |  %3.2f  \n", exam.total(), exam.avg());
	}

}
profile
logos and alogos

0개의 댓글