package com.test.spr;
public interface Record
{
public void setKor(int kor);
public int getKor();
public void setEng(int eng);
public int getEng();
public void setMat(int mat);
public int getMat();
public double getAvg();
public int getTot();
}
위와 같이 정의되어 있지 않은 interface 선언 이후 이를 implement 하는 클래스들은 모두 의존객체로써 작동할 수 있다. 또한 객체를 사용해야하는 위치에 의존관계를 만들 수 있다.
package com.test.spr;
public class RecordImpl1 implements Record
{
//주요속성 구성
private int kor, eng, mat;
@Override
public void setKor(int kor)
{
this.kor = kor;
}
@Override
public int getKor()
{
return kor;
}
@Override
public void setEng(int eng)
{
this.eng = eng;
}
@Override
public int getEng()
{
return eng;
}
@Override
public void setMat(int mat)
{
this.mat = mat;
}
@Override
public int getMat()
{
return mat;
}
@Override
public double getAvg()
{
double result = 0;
result = this.getTot()/3.0;
return result;
}
@Override
public int getTot()
{
int result = 0;
result = this.getKor() + this.getEng() + this.getMat();
return result;
}
1번에서 만든 interface를 implement하는 클래스를 생성하고 Override한다.
이 과정은 이후 Record로 업캐스팅 될수있게 만들고 업캐스팅 될 수 있다는것은
의존객체로 작동할수 있다는것
package com.test.spr;
public interface RecordView
{
//setter 메소드 선언 -> Record 인터페이스 타입의 객체를 넘겨받을 수 있도록 처리
public void setRecord(Record record);
public void input();
public void output();
}
의존관계: RecordView형 객체가 Record형 객체에 의존하게된다.
즉, Ioc가 성립되고 DI를 진행한것
/*=========================================
RecordViewImp1.java
-클래스
-RecordView 인터페이스를 구현하는 클래스로 설계
====================================*/
package com.test.spr;
import java.util.Scanner;
public class RecordViewImpl1 implements RecordView
{
//속성 구성 -> 인터페이스 형태의 자료형 구성
private Record record;
@Override
public void setRecord(Record record)
{
// TODO Auto-generated method stub
this.record = record;
}
@Override
public void input()
{
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("국어 영어 수학 점수 입력(공백 구분) : ");
String kor = sc.next();
String eng = sc.next();
String mat = sc.next();
record.setKor(Integer.parseInt(kor));
record.setEng(Integer.parseInt(eng));
record.setMat(Integer.parseInt(mat));
sc.close();
}
@Override
public void output()
{
System.out.println("국어 영어 수학 총점 평균");
System.out.printf("%6d %4d %4d %6d %5.1f"
, record.getKor(), record.getEng(), record.getMat()
, record.getTot(), record.getAvg());
}
}
/*=====================================
Main.java
-클래스
-main() 메소드가 포함된 테스트 클래스
======================================= */
package com.test.spr;
public class Main
{
public static void main(String[] args)
{
//RecordImpl1(Record)객체 생성 과정
//-- RecordView 입장에서의 의존 객체(dependency)
Record rec1 = new RecordImpl1();
//RecordImpl2(Record) 객체 생성 과정
//--RecordView 입장에서의 의존 객체(dependency)
Record rec2 = new RecordImpl2();
//RecordViewImpl1(RecordView)객체 생성 과정
//-- Record 객체(의존 객체) 필요
RecordView view = new RecordViewImpl1();
//의존객체 주입 (Injection)
view.setRecord(rec2); //setter injection(setter 를 통한 주입)
//의존객체 주입 방법을 사용하게 되면
// 느슨한 결합을 구성할 수 있게 되고
// 한쪽의 변동 상황이 다른 한 쪽에 영향을 덜어줄 수 있게된다.
//위가 스프링에서 처리하고 관리하게 될 영역
//------------------------------------------------------------
view.input();
view.output();
}
}
이와같이 사용할 수 있게된다.