inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

람다식 질문

해결된 질문

597

명수찬

작성한 질문수 7

2

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
안녕하세요. 강의 항상 잘 듣고 있습니다.
 
또한 항상 수고스럽게 답변해주시는 서포터 분들에게 먼저 감사 말씀 드립니다.
 
 
람다식의 용법에 대해서 궁금한 점이 있습니다.
 
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을 선언한 곳은 없는데 어떻게 사용할 수 있을까요?

자바 문법적인 강의는 영한 선생님께서 기본이라 안 해주시지만, 이미 기본서를 읽고 왔고 나름대로 검색을 해봤는데도 해답을 얻을 수가 없어서 질문을 남기게 되었습니다.

MVC spring

답변 1

1

OMG

안녕하세요. 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

OMG

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