기본 콘텐츠로 건너뛰기

글

라벨이 Trie인 게시물 표시

냉장고 가계부 프로젝트 39

식품명을 등록하는 부분에 자동완성 기능을 제공하면 사용자가 식품명을 입력할 때 좀 더 편리하게 사용할 수 있다. 위 스크린샷처럼 식품명을 한글자씩 입력할 때마다, 입력한 키워드로 시작하는 단어들을 제공한다. 냉장고 가계부 프로젝트에서는 단지 식품명을 입력하는데 도움을 주는 기능을 제공하므로, 사전에 준비된 키워드 목록을 제공한다. javascript는 bootstrap3-typeahead 를 사용한다. 키워드를 검색하기 위한 fridge-search 프로젝트를 새로 생성한다. 키워드 목록의 빠른 검색을 위해 Trie 알고리즘 을 사용한다. Trie 알고리즘을 구현한 Apache Commons Collection4 라이브러리를 사용하기위해 pom.xml 에 다음과 같이 의존성을 추가한다. <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> </dependency> Apache Commons Collections의 Trie  인터페이스를 구현한 구현클래스 PatriciaTrie 를 사용하여 자동완성 기능을 구현한다. 내부적으로 Map 인터페이스를 구현하고 있기때문에 데이터의 추가는 put, 삭제는 remove 메서드를 사용하며, prefixMap 이라는 메서드는 주어진 key 값을 접두사로 갖는 데이터들을 SortedMap 타입으로 리턴한다. 식품명 자동완성을 위해 ProductNameTrie 클래스를 다음과 같이 구현했다. @Component public class ProductNameTrie { private Trie<String, Long> trie = new PatriciaTrie<>(); private static final int MAX_SIZE = 10; publ...