domain은 DTO
repository는 DAO 인듯 하다.
domain에 Member라는 객체 생성(회원정보 - id, name)
repository는 memberRepository를 interface로 만들어서 memoryMemberRepository가 implements 해서 사용
새로 배운것
1. Optional 객체
이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있습니다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 됩니다.
(출처 | http://tcpschool.com/java/java_stream_optional)
Optional.ofNullable(store.get(id))
: null인 경우 client쪽에서 사용가능
2. return시 List 반환을 많이 함
회원정보를 key, value로 보관하는 map 타입을 사용하였는데,
전체 회원정보를 찾는 method 내에서 List로 반환하는 상황이 있었음
- 이는 java 실무에서 loop 돌리기 편하기 위해 list 반환을 많이 사용한다고 함
3. Test 케이스
java 에서는 JUnit 이라는 프레임워크로 테스트를 많이 실행한다.
main 메서드나, controller로 하기엔 시간이 걸리고, 반복실행이 어렵기 때문에
- 해당부분은 국비 공부할때 전혀 알지 못했던 부분이다.
(main폴더에서 만든걸 test 폴더에서 test 하면서 사용한다. test 폴더는 gradle에서 프로젝트 생성시 자동 지원함)
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach(){
repository.clearStore(); //store.clear();
}
@Test
public void 메소드1(){}
@Test
public void 메소드2(){}
@Test
public void 메소드3(){}
}
다음과 같이 Test 폴더에서 main 에 있는 repository를 객체로 사용해서 test를 한다.
- @Test : test 메소드 annotation
- @AfterEach : 각 method가 끝날때마다 동작하는 함수 (callback method)
test는 서로 의존관계 없이 테스트가 이루어져야함으로
4. 값이 같은지 확인하는 방법 3가지
1. 비교연산자로 console에서 비교값 확인
System.out.println("result =" + (result == member));
soutv 단축어 사용
2. Assertions.assertEquals 객체가 expected, actual 일치함을 확인
assertEquals(expected, actual)
Assertions.assertEquals(member, result);
true의 경우 아무것도 뜨지 않고(초록색) / error, false의 경우 terminal에 에러가 뜸
3. Assertions.assertThat
assertThat(actual, is(expected));
Assertions.assertThat(member).isEqualTo(result);
assertEquals의 경우 expected, actual 순서 헷갈릴때 많지만 이는 명확하게 사용가능
(참고 | https://jongmin92.github.io/2020/03/31/Java/use-assertthat/)
5. Test가 이루어지는 순서
1) 개발 후 테스트
2) 테스트 후 개발 : TDD (테스트 주도 개발)
그리고 나는 람다식을 잘 모른다 😥
이 부분은 따로 책으로 공부해야할듯
출처 | 인프런 / 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술(김영한)