안녕하세요. 도서관 토이 프로젝트에서 logging을 하는 기능을 추가하려고 했습니다. 이 중에, client의 ip address와 Host name, 그리고 요청 id 등을 추가해야 했는데요. 이를 어떻게 처리해야 하나 찾던 도중에 logback의 MDC를 알게 되었습니다. 그리고, 이것이 어떤 식으로 동작하는지 간단하게 질문글들을 찾아보니, 내부적으로 ThreadLocal을 쓴다는 답변이 있었습니다. java의 ThreadLocal은 처음 들어봤는데요. 꽤 오래 전부터 있었던 듯 해서, 이번 기회에 간단하게 정리해 보았습니다. 먼저, ThreadLocal에는 get, set, remove 이 정도밖에 없어요. 저 3개를 쓰는 간단한 예제 먼저 보고, 어떤 식으로 동작하는지 간단하게 내부만 보도록 하..
Java 검색 결과
안녕하세요. 오랫만입니다. 제 우분투 서버에 설치되어 있는 java랑 javac 버전은 8인데요. 이를 11로 어떻게 바꾸었는지 보도록 하겠습니다. 먼저, Main.java입니다. Map.of 메서드가 보이는데요. 문서를 보면 9 버전부터 적용되는 메서드라고 되어 있어요. 이 메서드가 리턴하는 것은 immutable map이라고 하는데요. Main.java를 컴파일 해 보면, of 라는 것을 찾을 수 없다는 에러가 나옵니다. 왜 그럴까요? java랑 javac의 버전이 1.8이였기 때문입니다. 저 메서드는 1.9에 추가되었으니 java11로 업데이트를 해 보겠습니다. 저는 우분투를 쓰고 있으니, apt search를 이용해서 openjdk가 들어가는 패키지를 모두 찾도록 하겠습니다. 보니까 제가 찾는 것..
이번 시간에는 Collection에 있는 removeIf에 대해서 알아보겠습니다. 저는 보통 List에서 filtering을 걸어 제거할 때 쓰는 편이에요. 먼저 predicate 인터페이스에요. 단어 사전을 보면, 근거를 두다, 단정하다 정도로 되어 있는데요. 앞에 a가 붙었으니 동사는 아닐 거 같네요. 서술? 이 정도로 해석하면 좋을까요? 술어? 이보다는 명제가 조금 더 적절하지 않을까 싶습니다. 그러면, 이 인터페이스는 어떠한 명제? 서술부가 참인지 거짓인지 판단하기 위해 쓰일 거 같아요. 그러면, 사실인지 거짓인지 평가하는 메서드도 있을 거 아니에요? 이것이 test에요. 이것은 인자 하나를 받아가지고 Evaluates, 평가를 하게 되는데요. 인풋으로 넘어온 인자가 predicate에 매치되면 ..
안녕하세요. 이번 시간에는 map의 merge 메소드에 대해서 간단하게 알아보겠습니다. 먼저 예제 프로그램을 하나 보겠습니다. 이 예제는 매우 간단한 프로그램인데요. 3번째 인자에 이상한 람다 식이 들어가 버립니다? 뭔지는 모르겠지만, 키에 대응되는 value 값에 concat를 시키는 모양입니다. 그러면 결과가 어떻게 나올까요? 키 값이 1인 것의 Value는 "ab", 키 값이 2인 것의 Value는 "cd"가 나오게 됩니다. 메서드 설명을 봅시다. key가 없는 경우라면 v값을 넣어버리고, 그렇지 않으면 remapping function에 의해서 나온 값으로 replace 한다고 되어 있어요. 이 메서드는 결정적으로 multiple value에 대해서 값을 combining 하기 위해 쓴다고 되어 ..
retainAll이라는 메소드의 시간 복잡도에 대해서 질문이 들어왔습니다. AbstractCollection에 있는 메소드인데요. 결론부터 말씀드리겠습니다. 간단하게 정리하면, 인자로 넘어가는 Collection의 contains에 따라서 갈리게 됩니다. 그런데, retainAll이 따로 재정의된 케이스도 있기 때문에 시간 복잡도를 분석하실 때 주의가 필요합니다. 밑에서 후술하겠습니다. 먼저 이 메서드의 설명을 봅시다. Collection에서 retainAll을 호출할 때 이 메서드를 볼 일이 적지 않기 때문입니다. c에 있는 원소들만을 획득한다. 라고 설명이 되어 있네요. 그리고, UnsupportedOperation 예외를 떨굴 수도 있다고 하는데요. 삭제 연산을 지원하지 않는다면 떨어트려지게 됩니다..
최근댓글