기록
211219 공부 기록
vivi
2021. 12. 19. 04:45
- @SpringBootTest와 @RunWith() (지금은 @ExtendWith을 쓰는 것같다.) @Test에서 사용하는 애노테이션들의 기능정리해보기.
- default 키워드
Java8부터 생긴 키워드로 인터페이스에 실제 내용을 구현할 수 있다. 인터페이스 -> 추상클래스 -> 구현 클래스를 추상 클래스를 생략할 수 있다.
예시
public interface SampleInterface { default void sampleDefault() { // 내용 구현 } }
- gradle 알게된 점.
// $buildDir, $projectDir 과 같은 변수들이 있고, 이런 식으로 사용할 수 있다. def customDir = "$buildDir/generated" // 이런것도 있었다. ${}를 사용해서 변수를 넣을 수 있는 듯하다. buildscript { ext { queryDslVersion = "5.0.0" } } dependencies { // .... 생략 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" } // gradle이 XML 처럼 단순히 라이브러리 설정하는 것인줄 알았는데 이런식으로 사용할 수 도 있었다. // 알고보니 Groovy 라는 스크립트 언어로, XML과 달리 변수 선언, if, else, for 등의 로직이 구현 가능하다고 함. compileQuerydsl.doFirst { // 이 부분의 이름은 어떻게 쓰는지 모르겠음 if ( .... ) { //.... }else{ //.... } }
- java8의 Function<T, R>
// Function<T, R>은 1개의 인자 Type T를 받고 1개의 객체 Type R을 리턴하는 함수형 인터페이스이다. public interface Function<T, R> { R apply(T t); } // 이런식으로 사용했음 Function<Guestbook, GuestbookDTO> fn = (entity -> entityToDto(entity)); public functionEx(Page<EN> result, Function<EN, DTO> fn){ List<DTO> dtoList = result.stream().map(fn).collect(Collectors.toList()); }
- RedirectAttributes의 addAttribute와 addFlashAttribute의 차이?
redirect는 get방식이다. 둘 다 get 방식인 리다이렉트를 할 때 값을 넘겨주기위한 용도인데,
addAttribute는 URL뒤에 붙게 되서 값이 유지가 되고,
addFlashAttribute는 URL이 아니라 리다이렉트가 발생하기 전에 모든 플래시 속성을 세션에 복사 -> 리다이렉트 -> 세션의 플래시 속성을 모델로 이동 으로 값을 넘겨주는 것이다. 일회성으로 새로고침할 경우 사라진다. 1개만 사용가능하므로 맵을 이용해서 값을 전달해야한다.
그림 출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=allkanet72&logNo=220964699929
-> 리다이렉트 후 URL 파라미터로 값을 꺼내야할 때는 addAttribute, URL에 노출되면 곤란한 정보일 경우는 addFlashAttribute를 활용하면 되겠다.
6. BooleanBuilder, BooleanExpression ?
7. Thymeleaf 자바스크립트 버튼 무반응
Thymeleaf에서 이렇게 버튼 동작을 시켰는데, 잘 동작하지 않았다. Enter 로는 폼 제출이 동작하는데, 버튼 클릭이 제대로 안먹는 것 같았다. 콘솔 로그를 찍어봐도 버튼이 제대로 동작하지 않는 것을 보니 script 쪽에 문제가 있는 것이 맞았다.
<script>
$('.btn-search').click(function(e){
searchForm.submit();
});
</script>
그리고 제대로 동작할 때도 있고, 제대로 동작하지 않을 때도 있어서 의아했는데, script 태그 안에 th:inline="javascript"를 빼먹어서 그런거였다.
<script th:inline="javascript">
console.log('click');
$('.btn-search').click(function(e){
searchForm.submit();
});
</script>