본문 바로가기
혼자 공부하는 것들/JAVA

Java11 람다식에서 VAR를 사용할 수 있다고?

by applepick 2022. 7. 2.
반응형

나만 몰랐던 건가....

 

Var 타입은 JavaScript에서 사용하는 방식입니다. (var만 보면 발작 버튼이.... 부들부들... 최대한 JS var는 지양해야 합니다.)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

 

var - JavaScript | MDN

The var statement declares a function-scoped or globally-scoped variable, optionally initializing it to a value.

developer.mozilla.org

 

이 var 형식을 Java11에서 어떻게 사용할 수 있을까? 정확히는 Java10에 도입되었네요.

간단하게 var는 타입 추론 방식입니다. 타입 추론은 위에 문서에 잘 정리되어 있습니다. 

 

멤버를 가져온 리스트 중에 "hello1234"이라는 이름의 사람만 가져오는 코드 확인해봅시다.

List<Member> findMembers = em.createQuery("select m from Member as m", Member.class)
                .getResultList();

findMembers = findMembers.stream()
                        .filter( m -> m.getName().equals("hello1234"))
                        .collect(Collectors.toList());

System.out.println(findMembers.toString());

 

정상적으로 잘 가져오는 것을 볼 수 있습니다.

 

여기서 Var를 어떻게 사용할 수 있을까?

List<Member> findMembers = em.createQuery("select m from Member as m", Member.class)
                .getResultList();

findMembers = findMembers.stream()
                        .filter((@NonNull var m) ->  m.getName().equals("hello1234"))
                        .collect(Collectors.toList());

System.out.println(findMembers.toString());

람다 식에서 var로 타입을 추론할 수 있습니다.

이게 뭐가 필요할까?

var를 사용하지 않았을 경우 member 객체 타입만 확인이 가능한 것을 볼 수 있습니다.

 

타입 추론이 가능해지면서 람다 식에서 컴파일 시점에 정확한 Entity 타입을 확인할 수 있고, 다양한 어노테이션을 사용할 수 있습니다. 

회사에서 java 11 버전을 쓰는데 재미있네요....

반응형

댓글