Spring FrameWork -1

유동현·2022년 11월 10일
0
post-thumbnail

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

	
	
	
}
  • 생성자를 통해 record형으로 업캐스팅된 recodeImpl 객체를 받아올것이고
    input(), output()메소드의 활용을 위해선 의존객체인 recodeImpl이 필요하다.
    RecordImpl클래스가 RecordViewImpl클래스의 의존객체인것

Main

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

}

이와같이 사용할 수 있게된다.

0개의 댓글