무지성 메모

ifpresent의 인자를 람다식으로 주셨는데 m->{}형태가 아닌 ()->{}형태로 주면 오류가 나는데 이유를 잘 모르겠습니다.

배게 2021. 8. 3. 18:56
728x90

출처 : 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을 받아 왔는지 안 받아 왔는지의 유무만 알면 되기 때문에