출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/lecture/49583?tab=community&speed=1.25&mm=close&q=266093
[질문]
memberRepository.findByName(member.getName())
.ifPresent(m ->{
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
람다 함수 또는 illegalstateexception과 관련된 질문입니다.
ifpresent의 인자를 람다식으로 주셨는데 m->{}형태가 아닌 ()->{}형태로 주면 오류가 나는데 이유를 잘 모르겠습니다.
어짜피 m이라는 매개변수를 사용하지 않아서 빈 값으로 남겨둘려고 했는데, 남겨두니 오류가 나고 매개변수를 m으로하니 오류가 나지 않습니다. 왜 그런것일까요?
[답변]
안녕하세요. 안녕하세요님^^
제가 바로 답을 드릴 수도 있지만, 그러면 더 많은 것을 얻어가실 수 없으니 답을 찾는 과정을 알려드릴께요.
ifPresent의 메서드 파라미터를 조사해보시면 이게 왜 안되는지 이해가 되실꺼에요.
감사합니다.
->ifPresent의 메서드 파라미터는 Consumer inteface이고 매개변수 1개를 받고 return값이 없음
parameter -> { } 구도. 블럭 안에 사용자가 원하는 동작 구현(throws new IllegalStateException 같은..)
Consumer는 객체 T를 받아서 소비하는 개념임
즉 일단 객체T를 받아오고(이건 필수) return을 해줄 필요는 없음.
그리고 받아온 객체T를 동작하는 블록에 사용을 해도 안해도됨
위에
.ifPresent(m ->{
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
는 m이 있다면 예외처리를 해주는 코드이기 때문에
m을 쓸 필요가 없음. m을 받아 왔는지 안 받아 왔는지의 유무만 알면 되기 때문에
'무지성 메모' 카테고리의 다른 글
■Map을 Key값이 아닌 Value를 이용하여 정렬 (0) | 2021.10.08 |
---|---|
■split() vs StringTokenizer ■DFS vs 백트래킹 (0) | 2021.09.27 |
MemberRepository repository = new MemoryMemberRepository(); 를 MemoryMemberRepository repository = new MemoryMemberRepository(); 로 변경하시는데, 그 이유가 궁금합니다! (0) | 2021.08.03 |
■인텔리제이 패러미터 옵션 단축키 ■인텔리제이 인라인 단축키 (0) | 2021.07.30 |
■애플기기 클립보드 공유..? ■템플릿 메소드 ■추상클래스와 인터페이스 (0) | 2021.07.23 |