본문 바로가기

Programing

(405)
[Java] enum find static 헬퍼 메서드 enum에 가끔 코드와 같은 값을 같이 넣을일이 있다.문제는 enum 코드 간에 데이터 변환이 필요하다. enum -> 코드로 가는 것은 getter를 제공하면 되는데, 반대는 열거에서 찾아야 한다.enum의 values()를 이용하면 iteration이 가능하기 때문이다. enum 타입이 많은 경우에 최악의 경우 O(n)의 복잡도를 가지게 된다.따라서 정적으로 map을 넣어두었다가 key에 해당하는 enum을 반환하게 헬퍼 메서드를 종종 만들게 된다. 그런데 키튼님에게 코드 리뷰를 받다 보니 Hashmap을 사용할 경우 CPU가 높이 치솟는 일이 발생할 수 있다고java.util.concurrent.ConcurrentMap 를 사용하라고 권장하셨다. 대중 템플릿은 아래와 같은 형태가 된다.public ..
[Spring] @Controller에서 @RequestParam로 Date 타입 받기. 특정 기간을 조회한다거나 할 때 HTTP GET으로 요청 파라메터를 받을 때 날짜로 받을 경우가 있다.이런경우에 날짜 포맷 자체는 문자열이나 이것을 Date로 변환을 해야 한다. 스프링에서는 파라메터에 대한 정보를 어노테이션으로 정보를 줄 수 있다. org.springframework.format.annotation.DateTimeFormat 예)@RequestParam(required = false) @DateTimeFormat(pattern = "yyyyMMdd") Date startDate, 주의 할 점은 파라메터가 해당 패턴과 일치하지 않으면 404에러로 빠질 수 있다는 것이다.그런 것을 화면에 표시한다고 하면 String으로 받아서 Date로 변환하는 것을 수동으로 해줘야 할 것이다. 또한, j..
[Handlebars] 공백 문자 trim하기 핸들바에서 문자를 합치다 보면, 마크업의 줄바꿈 때문에 문자열이 줄이 바뀌는 경우가 있다.이전 포스트인 http://namocom.tistory.com/475 가 그 예중에 하나이다. 예를 들어 a 엘리먼트로 하이퍼텍스트 링크를 건다고 했을 때 공백문자가 들어가 버리면 URL이 깨져버리는 일이 발생할 수 있다. 다행히 핸들바에서는 이러한 공백문자 제거하는 방법을 제공하고 있다.틸드(~)기호를 이용하면 된다. 관련된 깃랩 머지요청은 아래이다.{{~#each collection}} - trims whitespace before{{#each collection~}} - trims whitespace after{{~#each collection~}} - trims whitespace before and afte..
[Handlebars] each에서 마지막 원소의 조건 만들기(예. 콤마 빼기) 리스트로 값을 받는 것을 나의 문자열로 붙이는 것을 하던 중에 마지막 원소에는 콤마가 필요없었다.핸들바 코드 상에는 이랬다.{{#each items}} {{itemPackageId}}:{{itemId}}:{{quantity}}, {{/each}} 그런데 마지막에 콤마가 있으니 보기가 싫었다. 찾아보니 마지막 엘리먼트인지 판단할 수 있는 로직이 있었다.stackoverflow: conditional on last item in array using handlebars.js template{{#each items}} {{itemPackageId}}:{{itemId}}:{{quantity}}{{#unless @last}},{{/unless}} {{/each}}
TreeMap 정렬 순서 바꾸기 TreeMap의 경우 key 로 정렬을 해준다.그런데 정렬 지정이 되어 있지 않는 경우 자연 정렬(natural ordering)을 한다고 되어 있었다. 만약에 역순으로 정렬을 하려면 어떻게 하나? 대부분 대답이 Comparator 인터페이스를 구현을 해서 -1 을 곱해주는 것으로 알려주고 있었다.하지만 자바에는 이미 구현되어 있는 reverseOrder라는 것이 있었다. Collections.reverseOrder()) 트리맵을 생성할 때 아래처럼 넣어주면 된다.new TreeMap(Collections.reverseOrder()) 출처: stackoverflow: http://stackoverflow.com/questions/9338209/how-to-print-treemap-in-reverse-or..
[Java Anti-pattern] Passing the Arbitrary Number of Arguments 자바에서는 "Arbitrary Number of Arguments"이름으로 임의의 개수의 인자를 받을 수 있는 ... 이라는 구문이 있다.시스템에서 제공하는 printf가 그 예이다.public PrintStream printf(String format, Object... args) 인텔리J에서는 다음과 같은 경고를 보여줄 때가 있다. (Github)Reports any calls to a variable arity method where the call has a single argument in the variable arity parameter position, which is either a null or an array of a subtype of the variable arity paramet..
favicon을 태그로 지정하기 사실 favicon은 IE에서 브라우저의 아이콘을 표시하기 위한 방법이었다.1999년 마이크로 소프트가 릴리즈한 인터넷 익스플러어 5에서 최초로 사용되었다고 한다.그런데 현재 사실상의 표준이 되었다. 그런데 애플에서는 더 라운드 처리된 아이콘으로 쓸 수 있다는 것 같다. 표준화는 RFC 5988에 의해 진행되었고 HTML5 스펙에 포함되었다.기본적으로 루트 디렉토리의 /favicon.ico 파일을 HTTP Get으로 요청을 하지만 html의 head에 아래 같은 내용을 넣으면 특정 주소의 favicon을 로딩되게도 할 수 있다. 지원하는 브라우저는:
logback - 사람이 보기 좋게 하기 위해 패딩(padding)을 넣자. logback으로 로깅을 하고 있다.레벨, 시간 ... 등의 순서인데, 이미 레벨은 5자리 패딩을 하고 있다.왜냐하면 로깅 레벨은 WARN, INFO 같은 4자리 길이와 ERROR, FATAL 같은 5자리가 섞여있어서 패딩이 되어 있지 않다면 WARN 2016-08-11 11:45:10.474 [http-bio-9020-exec-1] c.c.a.a.t.TeWARN 2016-08-11 11:45:10.475 [http-bio-9020-exec-1] c.c.a.a.t.TeWARN 2016-08-11 11:45:10.477 [http-bio-9020-exec-1] c.c.a.a.t.TeERROR 2016-08-11 11:45:10.477 [http-bio-9020-exec-12] c.c.a.a.t.TeINFO..