메뉴 닫기

Java Stream 사용

Java 8에서 새롭게 사용 가능한 API로 Stream, lambda, Optional 이 있습니다.

그중 Stream 을 사용해보았던 기록을 남겨 봅니다.

 

Stream을 사용하다보면 Python을 처음 사용했을때처럼, 코드를 줄이고 간단하게 만들어나가는 재미가 있습니다.

함수형 프로그래밍이니, 성능이니(Stream API는 for-loop 보다 성능이 안좋다고 한다)를 떠나서 코드를 만드는 재미가 있기때문에 계속 사용해보고 싶은 생각이 들었습니다.

 

어느 시스템을 운영할때 2차원 배열로 된 String array 를 다룬다고 가정해보겠습니다.

2차원 배열의 각 value는 “,”를 delimiter 로 가지는 값입니다.

위의 array 에서 for-loop로 “DFB” 가 존재하는지 확인하려면 아래와 같은 코드로 처리 가능합니다.

foreach 문도 가능하겠지만, 기존의 for loop로 구현할 경우 index 변수와 2중 loop와 array 가 null 이 아닌지 NPE 예방까지 해야겠죠.

 

Stream API 로 한번 구현해보겠습니다.

 

아직 Stream 을 잘 다루지 못해서 좀 더 복잡할지도 모르겠습니다.

그래도 Python 을 처음 봤을때처럼 코드를 줄이는 재미가 있고, 가독성(?) 이 좋은 부분도 있으며 특히 index 변수를 잘못 사용해서 발생하는 miss를 줄일 수 있겠네요.

람다나 Stream 을 더 잘 활용할 수 있다면 Java 코드는 간결해지고 가독성이 높아질것 같습니다.

 

Parallel Stream 처럼 쓰레드를 이용한 병렬처리도 가능하니 for문안에서 여러 연산이 필요한 경우 Stream을 잘 이용한다면 성능적인 이점도 가질 수 있지 않을까요.

 

참고 : https://futurecreator.github.io/2018/08/26/java-8-streams/

https://jypthemiracle.medium.com/java-stream-api%EB%8A%94-%EC%99%9C-for-loop%EB%B3%B4%EB%8B%A4-%EB%8A%90%EB%A6%B4%EA%B9%8C-50dec4b9974b