racing car

mtak·2021년 5월 10일
0

Spring Study

목록 보기
13/13

hotheadfactory님이 유닛테스트를 도입한 racingcar과제를 구현하는데 필요한 지식

1.학습 목표

  • mvc pattern
  • unit test
  • get, set method

2. 학습 내용

1) MVC 패턴

(1) MVC 패턴이란?

디자인 패턴 중 하나이다! MVC 는 Model, View, Controller의 약자로 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.

디자인 패턴이란?
프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것.

사용자가 controller를 조작하면 아래 그림처럼 controller는 model을 통해서 데이터를 가져와, 그 정보를 view를 제어해 사용자에게 전달한다.


(2)Model이란?

  1. 어플리케이션의 정보(DATABASE, 상수, 초기화 값, 변수 etc..) 를 의미
  2. 이런 정보들의 가공을 책임지는 컴포넌트를 의미

모델의 규칙
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.

화면안의 네모박스에 글자가 표현된다면, 네모박스의 화면 위치 정보, 네모박스의 크기정보, 글자내용, 글자의 위치, 글자의 포맷 정보 등을 가지고 있어야 한다

  1. 뷰나 컨트롤러에 대해서 어떤 정보도 알면 안된다.

    데이터 변경이 일어났을 때 모델에서 화면 ui를 직접 컨트롤할 수 있는 (=뷰를 참조하는) 내부 속성값을 가지면 안된다.

  2. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

    모델의 속성 중 텍스트 정보가 바뀌면, 이벤트를 발생시켜 어딘가에(?)전달해야 한다.

(3)View란?

  1. 사용자 인터페이스 요소(input text, check box ..etc).
    즉, 데이터 및 객체의 입력 + 출력 을 담당한다.

뷰의 규칙
1. 모델이 가지고 있는 정보를 따로 저장하면 안된다.

화면에 글자를 표시 하기 위해, 모델이 가지고 있는 정보를 전달받게 될텐데, 그 정보를 유지하기 위해서 임의의 뷰 내부에 저장하면 안된다.
화면에 표시하기만 하고 그 화면을 그릴 때 필요한 정보들을 저장하면 안된다.

  1. 모델이나 컨트롤러와 같이 다른 구성요소들에 대해 알면 안된다.

    모델과 컨트롤러가 어떻게 동작하는지 아예 몰라야 한다.

  2. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

    뷰에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 모델에게 전달해서 모델을 변경해야 할 것이다. 그 작업을 하기 위해 변경 통지를 구현해야한다.

(4)Controller란?

  1. 모델과 뷰를 잇는 다리.
    즉, 사용자가 데이터를 클릭하고 수정하는 것에 대한 이벤트를 처리한다.
  2. 어플리케이션의 메인 로직을 담당한다.

컨트롤러의 규칙
1. 모델이나 뷰에 대해 알고 있어야 한다.

모델이나 뷰는 자기밖에 모르고, 변경을 외부로 알리고 수신할 줄만 알지만, 컨트롤러는 이 이벤트들을 중재해야 하기 때문에 모델과 뷰에 대해서 알고 있어야 한다.

  1. 모델이나 뷰의 변경을 모니터링해야한다.

    모델이나 뷰한테 변경 통지를 받으면 이를 해석해서 해당하는 구성요소에게 다시 통지한다. (교차로에서 교통정리)

(5)MVC왜 쓰나?

역할을 분리해서 하면 유지보수나 확장에 용이하다.

2) getter X setter

getter : get method라고도 불린다.
변수 값을 반환하는 메소드.
setter : set method라고도 불린다.
변수 값을 할당하는 메소드.
참고 자료

3) 단위 테스트

(1)단위 테스트(unit test)란?

  • 소스 코드의 특정 모듈이 의도된대로 정확히 작동하는지 검증하는 절차.
  • 모든 함수와 메소드에 대한 테스트 케이스를 작성해야 한다.

(2)JUnit이란?

  • 자바용 단위테스트 도구

JUnit 특징
1. @Test메서드가 호출될 때 마다 새로운 인스턴스를 생성하여 독립적인 테스트가 이뤄지게 한다.
2. assert메소도 테스트케이스의 수행 결과를 판별할 수 있다.
3. annotation(@Test @Before @After)으로 간결하게 테스트를 지원한다.
4. 결과는 성공(녹색💚) 실패(붉은색🧡) 중 하나로 표시된다.
5. 최적화된 코드도 볼 수 있다.

다음 링크를 보고 단위테스트를 따라해 보던 중 이미 있는 test폴더를 찐 테스트 폴더로 지정(1번 스탭)하는 부분에서 이런 오류가 뜨더라. 하지만 더 놀라운 점은 이후 단위테스트 돌려보는데 까지 문제가 없었다. 뇌피셜로는 gradle이 자동으로 테스트 폴더(java폴더)를 만들어줘서 문제없이 돌아갔던 것 같다. 근데 이상한점은 F4눌러서 테스트 폴더 리스트 보니까 java폴더 없었는데...? 아는 사람은 제보 바람.

assert method정리

  • assertArrayEquals(a, b) : 배열 A와 B가 일치함을 확인한다.
  • assertEquals(a, b) : 객체 A와 B가 같은 값을 가지는지 확인한다.
  • assertEquals(a, b, c) : 객체 A와 B가 값이 일치함을 확인한다.( a: 예상값, b:결과값, c: 오차범위)
  • assertSame(a, b) : 객체 A와 B가 같은 객체임을 확인한다.
  • assertTrue(a): 조건 A가 참인지 확인한다.
  • assertNotNull(a) : 객채 A가 null이 아님을 확인한다.
profile
노는게 젤 조아. 친구들 모여라!!

0개의 댓글