기록

211219 공부 기록

vivi 2021. 12. 19. 04:45
  1. @SpringBootTest와 @RunWith() (지금은 @ExtendWith을 쓰는 것같다.) @Test에서 사용하는 애노테이션들의 기능정리해보기.

  2. default 키워드
    Java8부터 생긴 키워드로 인터페이스에 실제 내용을 구현할 수 있다. 인터페이스 -> 추상클래스 -> 구현 클래스를 추상 클래스를 생략할 수 있다.
    예시
    public interface SampleInterface {
        default void sampleDefault() {
    		// 내용 구현
    	}
    }​


  3. 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{
          //....
        }
    }​
  4. 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());
    }
  5. 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>