람다식 질문
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
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
감사합니다.
0
안녕하세요. 먼저 정성 어린 답변 감사합니다.
Iterator를 생성해서 forEachRemaing으로 반복문을 돌린다는 것은 알겠는데..
여기서 람다식의 매개변수가 되는 paramName 어디서 나오는 것인지 궁금합니다. paramName이 선언된 곳도 없고.. 어떤 값이 들어가는지를 잘 모르겠어요ㅠㅠ..
메서드 체이닝이나 람다나 Iterator나 개념적으로는 학습을 했는데 적용되는 코드로 보니 간단한 건데도 너무 난해하네요...
0
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)));
프로그래밍은 단순 개념, 이론만 학습한다고 하여 이해하는 영역은 아니라고 생각해요.
개개인의 능력, 프로그래밍 경험치에 따라 개념, 이론만으로도 응용이 가능할 수 있고 불가능할 수 있다고 생각합니다. 지금 당장 이해가 안되더라도 학습하시다보면 이해하시게 될꺼에요.
0
아!!!!! paramName은 리스트 변수였군요 ㅠㅠㅠ
너무 기초라 답변하기 답답하셨을텐데 친절한 답변과 힘이 되는 조언 감사합니다!!
당장 이해가지 않더라도 꾸준히 학습하면서 김영한 선생님 로드맵 완주해보겠습니다~!
주말인데도 수고 많으십니다. 감사합니다.
servlet과 container에 대한 질문입니다
0
25
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
64
1
jsp 의존성 수정 요청
0
80
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
143
1
save() 메서드 문의
0
67
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
101
1
request-body-json
0
83
2
MVC 패턴의 적용 단위
0
97
1
RequestMapping을 이용한 핸들러, 어댑터
0
119
2
save 후 결과화면
0
89
2
jsp를 이용한 view
0
97
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
178
1
수업 코드 제공 관련 문의
0
97
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
100
3
파일 오픈 시
0
70
1
스프링 배치 관련
0
78
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
112
1
postman으로 /request-body-json-v1 호출시 500 error
0
96
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
79
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
111
1
console log 출력 관련 질문입니다.
0
75
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
139
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
77
2





