자바 람다, 스트림 등등
람다 - 보다 단순하게 표현하는데 유용한 개념으로 식별자 없이 실행 가능한 함수. 함수의 이름을 정의하지 않아도 함수처럼 활용할 수 있지만 반복적 사용을 하게 되는 함수일 경우 선언 해 주는것이 좋다.
자바 stream - 기존에 자바 컬렉션이나 배열을 가공할 떄 for이나 forEach로 가공했다면 stream을 이용해 람다함수 형식으로 요소들의 처리가 가능 어떤 배열이나 컬렉션이든 .stream으로 바꿀 수 있다.
스트림은 사용되고 난 후에 다시 사용할 수 없다.
List<String> list = new ArrayList<>();
list.add("korea");
Stream<String> stream = list.stream();
stream.map(str -> str.toUpperCase())
.forEach(it -> System.out.println(it));
map, filter, sorted 이름 그대로 사용 가능
::의 사용 -> 람다식을 사용할 때
list.forEach(x -> System.out.println(x)); 다음과 같이 두번 사용하는 것을 대신해서
list.forEach(System.out::println); 으로 대체해서 사용할 수 있다.
코드로 정리해보면
Set<String> set = list.stream()
.filter(it-> "서울".equals(it))
.collect(Collectors.toSet());
System.out.println(set);
Set<String> set = list.stream()
.filter("서울"::equals)
.collect(Collectors.toSet());
System.out.println(set);
원래 하던 스프링 스터디에서 다시 한번 기초 강의를 보기로 결정해서 스프링 MVC 1편을 듣고 다시 JPA활용 2로 넘어가기로 했다. 그래서 시작하는 스프링 MVC 1편.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + request);
System.out.println("response = " + response);
}
}
해당 코드의 출력은 아래와 같다.
HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@56ec427
response = org.apache.catalina.connector.ResponseFacade@ba93afa
스프링 MVC는 다양한 서블릿을 제공하기 때문에 request와 response가 interface로 구현돼 있고 그 안의 구현체가 출력된 것이라 보면 된다.
String username = request.getParameter("username");
System.out.println("username = " + username);
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello " + username);
간단하게 다음과 같이 http://localhost:8080/hello?username=world url에서 정보를 뽑아올 수 있다
httpServletRequest
역할 : http 요청을 파싱해준다.
구성
start line : http 메소드, url, 쿼리 스트링, 스키마, 프로토콜
헤더 : 헤더 조회
바디 : form 파라미터 형식 조회, message body 데이터 직접 조회
임시 저장소 기능 - 해당 http 요청이 시작부터 끝날 떄 까지 유지되는 임시 저장소 기능
저장 : request.setAttribute(name, value)
조회 : request.getAttribute(name)
세션 관리 기능
request.getSession(create: true)