본문 바로가기
Project

스프링 MVC로 구구단 출력 프로그램 만들기 - 도메인(vo), JUnit 테스트

by 보라코끼리 2021. 10. 25.
728x90

메인화면
결과화면

  • 자바스크립트 mvc 방식으로 구현했던 구구단 출력 프로그램을 스프링 mvc로 옮긴다.
  • 자바스크립트 방식에서 한발 더 나아가서 메인화면 아래쪽에 결과가 표시되도록 한다.
  • JUnit을 이용한 테스트도 구현해본다.
  • M(Model) 역할의 TimesTableService.java , C(Controller) 역할의 TimesTableController.java , V(View) 역할의 home.jsp 파일을 만든다.
  • 2021.10.22 - [Project] - 자바스크립트 MVC 형태로 구구단 출력 프로그램 만들기
 

자바스크립트 MVC 형태로 구구단 출력 프로그램 만들기

첫 단, 마지막 단, 마지막 곱할 수를 입력하는 칸을 만들고 계산하기 버튼을 만든다. 첫 단은 구구단의 시작단이 되고, 마지막 단은 구구단의 마지막 끝나는 단이된다. 첫 단이 2일 때 2 * 1 = 2 부

ele-code.tistory.com

728x90

1단계 : 도메인 객체 만들기

  • TimesTable 도메인 객체를 만든다.
  • 다른 말로 vo, dto 등으로 불린다. -> 추후 정리 예정
public class TimesTable {

	private int firstTimes;
	private int lastTimes;
	private int firstMultiplier;
	private int lastMultiplier;

	public int getFirstTimes() {
		return firstTimes;
	}

	public void setFirstTimes(int firstTimes) {
		this.firstTimes = firstTimes;
	}

	public int getLastTimes() {
		return lastTimes;
	}

	public void setLastTimes(int lastTimes) {
		this.lastTimes = lastTimes;
	}

	public int getFirstMultiplier() {
		return firstMultiplier;
	}

	public void setFirstMultiplier(int firstMultiplier) {
		this.firstMultiplier = firstMultiplier;
	}

	public int getLastMultiplier() {
		return lastMultiplier;
	}

	public void setLastMultiplier(int lastMultiplier) {
		this.lastMultiplier = lastMultiplier;
	}
}
  • int 타입으로 firstTimes, lastTimes, firstMultiplier, lastMultiplier 변수를 만들었다. 
  • 모두 private 으로 해주고 get, set을 통해 접근할 수 있도록 해주었다.
    • firstTimes : 첫 단
    • lastTimes : 마지막 단
    • firstMultiplier : 첫 번째 곱할 수
    • lastMultiplier : 마지막 곱할 수

2단계 : TimesTableServiceTest.java 파일 만들기

  • service.java 를 만들기 전에 우선 serviceTest.java 파일을 JUnit으로 테스트하여 확인 후 service.java 파일을 만들어주는 것이 좋다.
public class TimesTableServiceTest {

	@Test
	public void testGenerateTimesHashMap() {
		TimesTable table = new TimesTable();
		table.setFirstTimes(2);
		table.setLastTimes(9);
		table.setFirstMultiplier(1);
		table.setLastMultiplier(9);
		String[][] a = generateTimesTable(
						table.getFirstTimes(), 
						table.getLastTimes(), 
						table.getFirstMultiplier(), 
						table.getLastMultiplier());

		System.out.println(a[2][1]);
	}

	// [2][1] -> 2 * 1 = 2 형태로 배열 반환
	public String[][] generateTimesTable(int firstTimes, int lastTimes, int firstMultiplier, int lastMultiplier) {
		String[][] timesTable = new String[lastTimes+1][];
		for (int i = firstTimes; i <= lastTimes; i++) {
			timesTable[i] = generateTimes(i, firstMultiplier, lastMultiplier);
		}
		return timesTable;
	}

	// 2 * 1 = 2, 2 * 2 = 4 형태의 문자열 배열 반환 -> 단
	private String[] generateTimes(int times, int firstMultiplier, int lastMultiplier) {
		String[] time = new String[lastMultiplier+1];
		for (int i = firstMultiplier; i <= lastMultiplier; i++) {
			time[i] = generateTimesString(times, i);
		}
		return time;
	}

	// 2 * 1 = 2 형태 문자열 반환
	private String generateTimesString(int times, int multiplier) {
		int result = times * multiplier;
		String timesString = times + "*" + multiplier + "=" + result;
		return timesString;		
	}
}
  • 우선 파일을 만든 후 도메인 객체인 TimesTable을 인스턴스객체로 만들었다.
  • 그 후 firstTimes, lastTimes, firstMultiplier, lastMultiplier에 각각 2, 9, 1, 9 라는 숫자를 직접 입력하여 테스트하였다.
  • 자바스크립트 mvc 형태와 비슷하게 generateTimeString() 메서드로 우선 2*1=2 형태의 문자열을 우선 만들어주었다. 
  • generateTimes() 메서드로 각 단을 만들어주었다.
    • time[2] -> 2단 의 형식이다.
  • generateTimesTable() 메서드로 테이블을 만들어주었다.
    • timesTable[2][1] -> 2*1=2 의 형식이다.
  • 그리고 이를 testGenerateTimesHashMap() 메서드에서 테스트해주었다. 
    • JUnit 테스트를 위해 @Test 애너테이션을 붙여주었다.
    • JUnit 테스트 화면
      오류 없이 잘 실행된 것을 확인하였다.

3단계 : TimesTableControllerTest.java 파일 만들기

  • 컨트롤러 역시 파일을 만들기 전 test 파일을 먼저 만들어서 확인한다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:servlet-context.xml") // 설정 파일 위치
public class TimesTableControllerTest {
    @Autowired
	TimesTableService timesTableService;

	@Test
	public void testCreate() {
		TimesTable timesTable = new TimesTable();
		timesTable.setFirstTimes(2);
		timesTable.setLastTimes(9);
		timesTable.setFirstMultiplier(1);
		timesTable.setLastMultiplier(9);
		String[][] table = timesTableService.generateTimesTable(
						timesTable.getFirstTimes(), 
						timesTable.getLastTimes(), 
						timesTable.getFirstMultiplier(), 
						timesTable.getLastMultiplier());
		System.out.println(table[2][1]);

		Gson gson = new Gson();
		String gsonString = gson.toJson(table);
		System.out.println(gsonString);


	}
}
  • @RunWith 애너테이션을 설정해준다.
    • JUnit 프레임워크의 테스트 실행방법을 확장해주는 애너테이션이다.
    • 여기에 JUnit용 테스트 컨텍스트 프레임워크 확장 클래스인 SpringJUnit4ClassRunner.class 를 지정해주어 JUnit이 테스트 진행 중 사용할 애플리케이션 컨텍스트를 만들고 관리하는 작업을 진행하도록 해준다.
    • 없으면 @Autowired로 지정된 TimesTableService 클래스를 찾지 못한다. ("this.timesTableService" is null)
  • @ContextConfiguration 애너테이션을 설정해준다.
    • 이 애너테이션은 스프링 빈(Bean) 설정 파일의 위치를 지정해준다.
    • 없으면 IllegalStateException 이 발생한다. (Failed to load ApplicationContext)
  • @Test 애너테이션을 설정하고 테스트를 진행한다.
    • serviceTest 에서와 마찬가지로 TimesTable의 인스턴스를 만들고 값을 지정해주었다.
    • 이를 json형태로 만들어주기 위해 Gson을 사용하여 json형태의 문자열로 만들고 이를 출력해보았다.
    • JUnit 테스트 결과
      JUnit 테스트 결과 문제없이 잘 실행되었다.
    • 콘솔창 출력 결과
      콘솔 창 출력 결과 table[2][1]의 형태로 출력한 값이 2 * 1 = 2 로 잘 출력되었고 json 형태로 출력한 값 역시 0단, 1단은 없으므로 null값이 되고 2 * 0 = 0의 값도 null, 2 * 1 = 2 부터 값으로 저장되어있는 것을 확인할 수 있다.
      • 이 때, = 문자가 \u003d 로 표현되어있었다. 

* 테스트는 여기서 마무리를 하고 다음 문서에서 테스트를 바탕으로 프로그램을 구상하였다.

2021.10.07 - [Project] - 구구단 출력 프로젝트 01 - 모델(Model) 만들기

 

구구단 출력 프로젝트 01 - 모델(Model) 만들기

만드려는 프로그램 구구단 형태로 출력 첫 단 , 마지막 단 , 마지막 곱할 수 를 작성해서 계산 을 누르면 위와 같은 형태로 출력되도록 할 예정 /* firstTimes : 첫번째 단 (입력) lastTimes : 마지막 단 (

ele-code.tistory.com

2021.10.09 - [Project] - 구구단 출력 프로젝트 02 - 뷰(View) 만들기

 

구구단 출력 프로젝트 02 - 뷰(View) 만들기

1. home.jsp 파일에 html의 태그를 이용하여 "첫 단", "마지막 단", "마지막 곱할 수"를 입력하고 버튼을 클릭할 수 있도록 구성한다. 계산하기 placeholder를 이용하여 화면에 고정적으로 나타나있도록

ele-code.tistory.com

2021.10.10 - [Project] - 구구단 출력 프로젝트 03 - 컨트롤러(Controller) 만들기

 

구구단 출력 프로젝트 03 - 컨트롤러(Controller) 만들기

1. 만들어둔 모델(Model)인 TimesTableService를 연결한다. @Autowired TimesTableService timesTableService; Autowired를 사용하면 Controller에서 새로운 객체를 만들거나 할 필요 없이 사용이 가능하다. 2. 브..

ele-code.tistory.com

2021.10.11 - [Project] - 구구단 출력 프로젝트 04 - 뷰(View) 출력방식 수정

 

구구단 출력 프로젝트 04 - 뷰(View) 출력방식 수정

기존의 뷰(View)에서는 3중 for문을 이용하여 직각삼각형 모양의 화면을 만들어내었다. 기존의 소스에서는 3중의 for문을 반복하면서 위의 형태로 구구단을 출력해주는 형태였다. 우선 세로줄을 만

ele-code.tistory.com

 

728x90