해결된 질문
작성
·
522
2
private Map<String, String> createParamMap(HttpServletRequest request) {
Map<String, String> paramMap = new HashMap<>();
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName)));
return paramMap;
}
위의 코드에서
paramName -> paramMap.put(paramName, request.getParameter(paramName)));
의 라인에서 paramName 이라는 매개변수를 어떻게 사용할 수 있는건가요?
람다식이 (파라미터) -> (로직) 의 형태((a,b) -> (a+b)로 사용하는 문법인 걸로 알고 있는데
위의 코드가 paramName이라는 매개변수를 받아서 paramMap에 paramName이라는 Key와 request.getParameter(paramName)이라는 Value를 넣는 것으로 이해했습니다.
그런데 paramName을 선언한 곳은 없는데 어떻게 사용할 수 있을까요?
자바 문법적인 강의는 영한 선생님께서 기본이라 안 해주시지만, 이미 기본서를 읽고 왔고 나름대로 검색을 해봤는데도 해답을 얻을 수가 없어서 질문을 남기게 되었습니다.
답변 1
1
안녕하세요. aud248님, 공식 서포터즈 OMG입니다.
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> paramMap.put(paramName,
request.getParameter(paramName)));
위 코드가 메서드 체이닝으로 호출되고 있는 것을 확인하실 수 있습니다.
forEachRemaining() 전의 코드인 asIterator()
의 구현코드는 아래와 같습니다.
Iterator를 반환하고 있는 것을 확인 할 수있는데요, 아래와 같이 기존 코드를 변경할 수 있습니다.
Iterator<String> stringIterator = request.getParameterNames().asIterator();
stringIterator.forEachRemaining(paramName -> paramMap.put(paramName,
request.getParameter(paramName)));
Iterator에 대해서도 확인을 하셔야 하는데 잘 설명 되어 있는 정리글 첨부합니다.
Iterator 그리고 Iterable에 대해 정리 — wedul
감사합니다.
Iterator<String> stringIterator = request.getParameterNames().asIterator();
stringIterator.forEachRemaining(paramName -> paramMap.put(paramName,
request.getParameter(paramName)));
이 코드를
List<String> nameList로, forEachRemaining을 forEach로 바꿔생각해보시면 조금 더 이해하시기 수월하실꺼에요.
List<String> nameList = request.getParameterNames();
nameList.forEach(paramName -> paramMap.put(paramName,
request.getParameter(paramName)));
프로그래밍은 단순 개념, 이론만 학습한다고 하여 이해하는 영역은 아니라고 생각해요.
개개인의 능력, 프로그래밍 경험치에 따라 개념, 이론만으로도 응용이 가능할 수 있고 불가능할 수 있다고 생각합니다. 지금 당장 이해가 안되더라도 학습하시다보면 이해하시게 될꺼에요.
아!!!!! paramName은 리스트 변수였군요 ㅠㅠㅠ
너무 기초라 답변하기 답답하셨을텐데 친절한 답변과 힘이 되는 조언 감사합니다!!
당장 이해가지 않더라도 꾸준히 학습하면서 김영한 선생님 로드맵 완주해보겠습니다~!
주말인데도 수고 많으십니다. 감사합니다.
안녕하세요. 먼저 정성 어린 답변 감사합니다.
Iterator를 생성해서 forEachRemaing으로 반복문을 돌린다는 것은 알겠는데..
여기서 람다식의 매개변수가 되는 paramName 어디서 나오는 것인지 궁금합니다. paramName이 선언된 곳도 없고.. 어떤 값이 들어가는지를 잘 모르겠어요ㅠㅠ..
메서드 체이닝이나 람다나 Iterator나 개념적으로는 학습을 했는데 적용되는 코드로 보니 간단한 건데도 너무 난해하네요...