ifpresent의 인자를 람다식으로 주셨는데 m->{}형태가 아닌 ()->{}형태로 주면 오류가 나는데 이유를 잘 모르겠습니다.
출처 : 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을 받아 왔는지 안 받아 왔는지의 유무만 알면 되기 때문에