Java 8에서 제대로 지원하는 stream과 람다(lamda)를 섞어서 쓰면 좋은데 람다가 코드를 어느 수준까지 줄여주는지를 한번 살펴보니 무시무시하다라는 생각이 든다.
public class OneLoginSimpleUserService { public UserAuthority processLogin(Authentication auth) { return new UserAuthority() { @Override public Collection<? extends Authority> getOwnedRoles() { return Arrays.asList(new Authority[]{ new Authority() { @Override public String toStringCode() { return"ROLE_ADMIN"; } }}); } }; } }
이걸 람다를 적용해서 고치면…
public class OneLoginSimpleUserService { public UserAuthority processLogin(Authentication auth) { return () -> Arrays.asList(new Authority[] { () -> "ROLE_ADMIN" }); } }
기존 자바의 인터페이스를 사용해서 불필요한 라인들이 딱 한줄의 return문으로 정리된다.
이걸 해석하는데 좀 시간이 필요하긴 한데, 얻을 수 있는게 참 많을 것 같다. 특히나 Interface를 활용해서 DI 기법으로 코드를 작성하는 방식이 더욱 더 각광받을 것 같다.