본문 바로가기
카테고리 없음

TIL-26

by 오우지 2021. 10. 23.

자바 람다, 스트림 등등

 

람다 - 보다 단순하게 표현하는데 유용한 개념으로 식별자 없이 실행 가능한 함수. 함수의 이름을 정의하지 않아도 함수처럼 활용할 수 있지만 반복적 사용을 하게 되는 함수일 경우 선언 해 주는것이 좋다.

 

자바 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)