자바가 버전업이 되면서 (JDK 1.8 이상) 기존의 길게 쭈욱 늘려서 썻던 코드들이 짧아지고 있다.
대표적인 기능 강화로는 3가지 정도이다.
1. 람다 표현식 : 함수형 프로그래밍
2. 스트림 API : 데이터의 추상화
3. java.time 패키지 : 새로운 날짜와 시간 API
람다는 자바스크립트에서 통상 많이 사용했었는데..예를들어 이런코드를 말한다.
var array = [1,2,3,4,5];
array.forEach( arg ->{
console.log(arg);
});
그리고 스트림은 java.util.Arrays 패키지에 있는 녀석으로 자바스크립트처럼 foreach, map, filter 등의 기능을 지원 해 준다. 이름도 비슷한데..사실 기능도 비슷하다.
Optional과 stream을 활용해서 이전에 복잡했던 코드를 줄여보았다.
//기존 1.7이하 스타일들
String arg = null;
int num = 0;
if(arg != null){
num = Integer.parseInt(arg);
} else {
num = -1;
}
System.out.println(num);
//1.8 이상부터 사용 가능한 스타일
int chagne = Optional.ofNullable(arg).map(Integer::parseInt).orElse(-1);
System.out.println(chagne);
첫번째 부분은 기존에 if를 활용해서 null을 체크하는 소스이다. 기존 소스코드의 복잡한 라인이 1줄로 바뀐 것을 볼 수 있다. Optional은 java.util.Optional에서 지원하는 클래스이며 제네릭을 통한 다양한 자료형을 받을 수 있게 해준다.
ofNullable은 해당 arg가 널인지 체크를 해주고, map이라는 메소드를 통해서 데이터를 가공한 다음 orElse를 통해서 만약 null이면 -1을 리턴하게 해 주었다.
위 내용을 토대로 어떠한 절차식 코딩을 한 다면 ifPresent를 활용하면 된다.
String arg = "hello world";
Optional.ofNullable(arg).ifPresent((res)->{ // null이면 아래 출력문이 실행되지 않는다.
System.out.println("not working : " + res);
});
또 하나의 매력적인 기능이 stream을 활용한 Collection 데이터 가공의 편리성이다.
첫번째 소스코드에서 map을 사용했는데 아래 코드에서는 filter를 사용하여 보았다.
아래코드를 보면,
String[] str_array = {"item1","item2","item3","item4","item5"}; //item2만 삭제하고 싶다는 가정
str_array = Arrays.stream(str_array).filter((item)->{ //필터를 통한 item2 제거
return item.equals("item2")? false : true; //false면 데이터 소거
}).toArray(String[]::new); //배열값으로 전환
for(String str : str_array){ //출력
System.out.println(str);
}
알다시피 JAVA에서 일반 배열을 제거 또는 수정 하려면 "검색"을 통한 소스코드를 찾아 내야한다;;
Collection의 ArrayList나 map 같은 경우에는 편한 메소드를 제공하지만 일반 배열은 삭제랑 수정이 좀 어려운(?) 편이기 때문이다. Java 1.8이 괜히 각광받는게 아닌 것 같다.
'Java(자바)' 카테고리의 다른 글
Java synchronized, ReentrantLock, semaphore (0) | 2019.06.13 |
---|---|
Java poi 스타일 적용 및 적용이 되지 않는 경우 (10) | 2019.05.28 |
Java 배열로부터 엑셀, csv, 및 일반 text 파일 만들기 (0) | 2019.05.17 |
파일종류, Dos파일 / Unix파일 (0) | 2019.04.25 |
자바 기본 인코딩 (with 파일 입출력) (0) | 2019.04.25 |
댓글