웹 개발 메모장
[자바] 자바8 맛보기 본문
자바8 맛보기
벌써 자바10까지 나왔지만 자바를 잘 사용하지 않아서 자바8에서 추가된 내용에 대해 최근에야 알게됬습니다.
함수형 인터페이스의 사용입니다.
예를 들어
1 | List<Integer> numList = Arrays.asList(1000, 8000, 3000, 4000, 2000); | cs |
이렇게 1000, 8000, 3000, 4000, 2000 을 요소로 갖는 List가 있을 때
"1000원, 8000원, 3000원, 4000원, 2000원" 이러한 문자열을 출력하기 위한 코드를 작성해봅시다.
이전에는 다음과 같이 작성했었습니다.
1 2 3 4 5 6 7 | StringBuilder sb = new StringBuilder(); for(int num : numList) { sb.append(num).append("원, "); } if(numList.size() > 0) sb.delete(sb.length()-", ".length(), sb.length()); | cs |
코드 내용은 아래와 같은데
1. 문자열을 다루기 위해 StringBuilder 객체를 생성하고
2. List를 반복문으로 돌려서 각 리스트 요소에 "원, "를 붙이고
3. 마지막 요소에 붙어있는 ", "를 제거한다.
복잡해질수록 가독성이 떨어지고 실수할 가능성이 커집니다.
자바8에서 추가된 방식을 사용하면 아래와 같은 코드로 짤 수 있습니다.
1 2 3 4 | String str = numList.stream() .map(String::valueOf) .map((s) -> s+="원") .collect(Collectors.joining(", ")); | cs |
이전 방식보다 상당히 직관적입니다.
1. .stream()
리스트의 요소들을 연산 할 수 있도록해주고
2. .map(String::valueOf)
Integer 인 요소들을 문자열로 바꾸기위해
요소 = String.valueOf(요소) 를 해주고
3. .map((s) -> s+="원")
요소 += "원" 으로 "원"을 붙여주고
4. .collect(Collectors.joining(", "));
요소들을 ", "로 조인해준다.
추상메소드를 하나만 포함하는 인터페이스를 functional 인터페이스라고 부르며
이를 통해 함수를 값으로? 주고 받는 듯한 형태가 추가된 것으로 보입니다.
위에서 보이는 .map(String::valueOf) 를 살펴보면
map( )은 java.util.Function 이라는 funtional 인터페이스를 인자로 받도록 되어있고
int 를 인자로 받고 String을 반환하는 String.valueOf(int i) 메소드를 인자로 넘긴 형태입니다.
클래스가 가지는 static 메소드를 :: 을 이용해 접근하면 메소드가 반환하는 값이 아닌 메소드 자체를 전달할 수 있게 된 것 같습니다.
'옛날.. > 자바' 카테고리의 다른 글
[자바] Integer Object는 Object인데 왜 == 연산 결과가 가끔 true 일까 (0) | 2019.01.25 |
---|---|
[자바] Lazy Evaluation 이란? (6) | 2019.01.25 |
[자바] HashMap 기초 개념 (0) | 2018.08.13 |
[자바] 매개 변수에 함수를 넣어봅시다. (0) | 2018.07.10 |
[자바] 인터페이스에도 메소드 정의가 가능하다 (2) | 2018.07.10 |