java에서 map, set 계열을 다룰 때 전체 원소들을 순회해야 할 때가 있습니다. 이 때 어떻게 해야 하는지 간단하게 알아보겠습니다. 보통 map 계열 중에서는, treemap과 hashmap의 사용 빈도가 꽤 높은 편인데요. 이는 hash 계열은 equal 쿼리에, tree 계열은 range 쿼리에 매우 유리한 구조이기 때문입니다. 그리고 저는 농담처럼 자바에서는 TreeMap만 알고 있으면 풀 수 있는 코딩테스트 문제가 상당히 많을 거다. 라는 말도 하는데요. equal 쿼리도 성능이 그렇게 썩 나쁜 편이 아니기 때문입니다. 로그 복잡도로 찾아도 나름 빠르기도 하고요. 먼저, Map에서의 Key, Value 쌍을 모두 순회하기 위해서는, keySet을 이용해야 합니다. 이것은 Map에 있는 ke..
전체 글 검색 결과
저번 시간에 Valid 어노테이션을 이용해서, json 입력에 대해서 검증하는 처리를 했어요. 예를 들자면, regLevel이 1 이상이여야 하고, itemName은 공백이면 안되는 조건을 걸면, itemName 필드가 공백인 것이 들어오면 400을 떨궈주게 됩니다. 이 글을 보시면 대략적으로 감이 오실 거 같아요. 그런데 제 토이 프로젝트에서, validation 처리야 했다고 쳐도, 예외에 대해서 ResponseEntity를 controller에서 만들어 버렸어요. 최근에 리팩토링 한 부분이 이것을 ControllerAdvice로 뺀 것이였는데요. 그러면서 몇 개의 api에 대해서 에러 포맷도 custom 하게 처리하게 되었습니다. 이 부분은 프로젝트 변경 내역에서 확인하실 수 있습니다. 이전에 했던..
오랫만에 자료구조 시간으로 돌아왔습니다. heap 자료구조는 다들 익숙하실 겁니다. 그리고 힙을 build 하는 연산을 힙 사이즈가 n이라면 O(n)에 할 수 있다는 이야기는 예전부터 들어왔어요. 그런데 어떤 원리로 그것을 할 수 있을까요? 자바에도 PriorityQueue가 있으니, 이 클래스의 내부 소스를 까보면서 이야기 해 보도록 하겠습니다. 문제 상황은 임의의 순서로 배열되어 있는 array를 heap 조건에 맞추어서 build 하는 것입니다. 그에 맞게 코드를 짜 보았습니다. PriorityQueue에 list를 넘겨주었는데요. Collection을 받았기 때문에, 아래 메서드가 호출될 겁니다. 아래에 나와있는 코드를 보겠습니다. 여기서 보면 List는 SortedSet도 아니고, Priorit..
파일을 읽고 쓰는 일은 생각보다 자주 하게 됩니다. 이번 시간에는 파이썬으로 텍스트 파일을 읽는 법에 대해서 간단하게 다뤄보겠습니다. in1.txt에는 이런 내용이 저장되어 있어요. 우리의 목표는, 파일에 저장되어 있는 내용을 그대로 출력하는 것이 목표입니다. 어떻게 하면 좋을까요? 우리가 알아야 할 내용은 딱 2개입니다. with open 절과, 현재 line을 iteration으로 얻어오는 것. 먼저 with open 절은 저 같은 경우 아래와 같이 많이 씁니다. 보통, 저는 파일 객체를 다룰 때 f라고 많이 합니다. 요래 하면, file_name을 file_open_mode로 엽니다. 파일의 모드는 'r', 'w' 등이 있을 겁니다. 여기에서는 읽기 모드로 연다고 했으므로, 모드를 'r' 로 하면 ..
최근에 제 토이 프로젝트를 손 보면서, 바꾼 것이 몇 가지 있습니다. 이 중에서 UserService 단에서 예외 처리하는 부분을 추가하였습니다. 해당 부분은 여기서 볼 수 있어요. 현재 제 토이 프로젝트 레포에 있는 예외 처리 코드들이 살짝 비대한 경향이 있어서 추가적인 리팩토링을 할 예정입니다. 그 부분은 나중에 언급할 기회가 있을 듯 싶습니다. 이 글에서 설명할 부분은 이 문서와 일맥 상통한 내용이니 간단하게 읽어보시면 도움이 될 듯 합니다. 원래 regUser는 위와 같이 구현이 되어 있었습니다. 그리고 예외가 발생하면 Service 단에서도, Controller 단에서도 처리가 되지 않는 구조였습니다. 제 도서관 api의 db에 저장되어 있는 user_name은 위와 같습니다. 'cho'가 있으..
최근댓글