일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- clean code
- 시큐리티
- 스프링부트
- OAuth
- Producer
- Refactoring
- load balancing
- apache
- 비동기
- tomcat
- JPA
- GC
- 스프링
- Security
- spring boot
- java
- JWT
- 페이스북
- 리팩토링
- g1
- gdg
- Spring
- 클린코드
- assertj
- 페이징
- 스프링 부트
- jvm
- oauth2
- RabbitMQ
- 권한
Archives
- Today
- Total
허원철의 개발 블로그
Google - Guava 본문
구글에서는 안드로이드 버전 네이밍을 유명 과자이름로 붙이는 방식으로 하고 있습니다.(오늘날까지는 오레오까지 확인되었습니다.) 이 와 비슷하게 자바 프레임워크인 Guice도 있고, 유틸성(?) 라이브러리 Guava라는 것이 있는데, 이번에는 그 중 Guava를 소개하고자 하는 글 입니다.
Guava 맛보기
- 유틸성 라이브러리이다보니, Spring Framework에서 제공해주는 것과 흡사한 것도 있고, 중복되는 것도 있습니다.
1) StopWatch
- Spring Framwork에서도 Stopwatch 존재합니다
1 2 3 4 5 6 7 8 9 10 | @Before public void before_start() { stopwatch = Stopwatch.createStarted(); } // ... @After public void after_stop() { stopwatch.stop(); System.out.println("Test Time : " + stopwatch); } | cs |
2) Strings
① isNullOrEmpty
- Spring Framework에서 StringUtils.isEmpty() 존재합니다.
- 메소드 네이밍이 조금 더 명확한 표현인 듯 합니다.
1 2 3 4 5 | @Test public void test_isNullOrEmpty() throws Exception { Assert.assertTrue(Strings.isNullOrEmpty("")); Assert.assertTrue(Strings.isNullOrEmpty(null)); } | cs |
② repeat
- 반복하고자 하는 문자열을 n번 반복 가능합니다.
1 2 3 4 5 6 | @Test public void test_repeat() throws Exception { Assert.assertEquals("String is same content", Strings.repeat("wonchul ", 2), "wonchul wonchul "); } | cs |
3) Joiner
- 서로 다른 문자열을 구분자를 넣어 하나의 문자열로 합칠 수 있습니다.
1 2 3 4 5 6 7 | @Test public void test_joiner() throws Exception { Joiner joiner = Joiner.on(",").skipNulls(); String joinNumber = joiner.join("1", null, "3", "4"); Assert.assertEquals("1,3,4", joinNumber); } | cs |
① mapJoiner
- map의 key : value를 문자열로 원하는 표현을 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 | @Test public void test_joinerMapJoiner() throws Exception { Joiner.MapJoiner mapJoiner = Joiner.on("&").withKeyValueSeparator("="); Map<String, String> map = Maps.newHashMap(); map.put("key", "param"); map.put("key2", "param2"); Assert.assertEquals(mapJoiner.join(map), "key2=param2&key=param"); } | cs |
4) Splitter
- 하나의 문자열을 구분자를 통해 나눌 수 있습니다.
1 2 3 4 5 | @Test public void test_splitter() throws Exception { Splitter splitter = Splitter.on(";"); splitter.split("heo;won;chul").forEach(System.out::println); } | cs |
① mapSplitter
- mapJoiner의 반대되는 기능이라고 볼 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | @Test public void test_splitterMapSplitter() throws Exception { Splitter.MapSplitter mapSplitter = Splitter.on("&").withKeyValueSeparator("="); Map<String, String> map = Maps.newHashMap(); map.put("key", "param"); map.put("key2", "param2"); Map<String, String> map2 = mapSplitter.split("key2=param2&key=param"); Assert.assertEquals(map.get("key"), map2.get("key")); } | cs |
5) ImmutableCollection
- 값을 추가하고 제거 할 수 없는 Collection Class를 만들 수 있습니다.
1 | ImmutableCollection<Integer> IMMUTABLE_NUMBERS = ImmutableSet.of(1, 2, 3, 4, 5); | cs |
※ add/remove 시, UnsupportedOperationException 발생합니다.
6) Collection
- 조금 더 간추려진 코드를 만들 수 있습니다.
①
newArrayList
- 인스턴스 생성을 조금 더 간결하게 해줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Test public void test_newArrayList() { Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9).forEach(System.out::println); // JDK 6 이하 List<Integer> list1 = new ArrayList<Integer>(); // JDK 7 이상 List<Integer> list2 = new ArrayList<>(); // Guava List<Integer> list3 = Lists.newArrayList(); } | cs |
② partition
- 사이즈 지정하여 Collection을 나눌 때 유용하게 사용될 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | @Test public void test_partitionToLists() { Integer groupSize = 3; List<Integer> numberList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9); Lists.partition(numberList, groupSize) .forEach(list -> { list.forEach(System.out::print); System.out.println(); }); } | cs |
③ cartesianProduct
- SQL CROSS JOIN과 같은 기능을 합니다.
1 2 3 4 5 6 7 8 | @Test public void test_cartesianProduct() { List<Integer> numberList1 = Lists.newArrayList(1, 2); List<Integer> numberList2 = Lists.newArrayList(3, 4); Lists.cartesianProduct(numberList1, numberList2) .forEach(System.out::println); } | cs |
④ reverse
1 2 3 4 5 | @Test public void test_reverse() { List<Integer> numberList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9); Lists.reverse(numberList).forEach(System.out::println); } | cs |
⑤ transform
1 2 3 4 5 | @Test public void test_transform() { List<Integer> numberList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9); Lists.transform(numberList, value -> value * 2).forEach(System.out::println); } | cs |
7) Math
- XXXXMath Class가 존재하여, 각 형식에 맞게 변환 가능합니다.
- RoundingMode로 올림/반올림/내림 등의 처리 가능합니다.
1 2 3 4 5 6 7 8 9 10 | @Test public void test_checkedMultiply() throws Exception { try { IntMath.checkedMultiply(1 * 10000 * 10000, 100); } catch (ArithmeticException e) { e.printStackTrace(); } Assert.assertTrue(true); } | cs |
참고
'java' 카테고리의 다른 글
Lombok - 간략 정리 (416) | 2017.06.01 |
---|---|
Thread Pool 이해하기 (401) | 2017.04.01 |
Java - Garbage First(G1) Garbage Collection (417) | 2017.03.12 |
Java - JVM Architecture (429) | 2017.03.08 |
Java - Compare GC (406) | 2017.03.07 |
Comments