Map으로 Iterator (반복문) 를 진행할 경우 주의 사항

Java·2016.09.26 12:42


FindBugs를 사용하기 시작했다.

포프님의 유닛테스트 vs 정적테스트 라는 주제의 영상을 보면서 으잉? 정적분석기가 그렇게 좋은거였어? 라는 생각에 부랴부랴 오늘부터 시작하게 되었다.

FindBugs에 대해선 다음에 한번 정리를 해보겠다.


어찌됐든 오늘 진행한 상황은 아래와 같다.


배포 예정 중인 프로젝트에 대해 FindBugs를 돌려보았다. 

아래와 같은 경고가 등장하였는데 어떤 문제인지 한번 생각해보자.


(문제가 있던 코드)


코드 자체는 크게 어려운게 없다.

Map으로 들어온 인자값을 keySet()으로 set으로 변환후 for를 돌며 key값으로 Map의 value를 template() 에 넘겨주는 일이다.


FindBugs에서는 아래와 같은 경고가 나왔다.

(findbugs에서 경고)


경고 메세지를 보면 금방 눈치챌 수 있을것 같다.


즉, Map을 keySet으로 전환후 뽑아낸 Key를 통해 Map의 Value를 추출하는 과정은 key를 뽑아내는 과정 + 해당 key로 Map의 value를 찾는 과정이 포함되어 한번에 key와 value를 정리하는 entrySet보다 비효율적이라는 이야기다.


그래서 이를 해결하면!



FindBugs에서 더이성 경고를 보내지 않게 되었다.


생각보다 FindBugs가 좋은것 같다.

런타임 단계가 되어야만 발생할 수 있는 문제를 미리 잡아준다는 것만으로 충분히 적용할 가치가 있는 것 같다.

좀 더 잘 활용할 수 있도록 연습 후에 Maven/Gradle에 플러그인을 강제하도록 진행해봐야겠다.







네이버 페이로 후원 (응원) 할 수 있어요!

(모바일에서만 지원되요 ㅠ)







IntelliJ & 안드로이드 스튜디오의 기본기를 배우고 싶다면 아래 영상을 참고해보세요!

Posted by 창천향로 창천향로

태그