java_stream, lambda

황호준·2023년 5월 26일

CS

목록 보기
11/29

Stream

  • 스트림 : 흐름(데이터의 흐름)

  • 중간연산 -filter() , map() 등

  • 최종연산-averge(),count(),sum() 등

특징

  1. 람다식으로 요소 처리 코드 제공
  2. 내부 반복자를 사용하므로 병렬 처리가 쉽다.
  3. 중간 처리와 최종 처리가 존재

컬렉션으로부터 스트림 얻기

배열로부터 스트림 얻기

숫자 범위로부터 스트림 얻기

빈 스트림 얻기

람다식으로 스트림 생성하기 -iterator()

람다식으로 스트림 생성하기 -generate()

Lambda

  • 익명 함수 지칭 (두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 변환)
  • 장점 :
    • 코드 간결성
    • 자연연산 수행
    • 병렬처리 가능
  • 단점 :
    • 람다식의 호출이 까다로움
    • 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어짐
    • 불필요하게 너무 사용되면 가독성 저하

  1. 람다는 매개변수 화살표(->) 함수몸체로 이용하여 사용 할 수 있다.
  2. 함수몸체가 단일 실행문이면 괄호{}를 생략 할 수 있다.
  3. 함수몸체가 return문으로만 구성되어 있는 경우 괄호{}를 생략 할 수 없다.

Reflection & Dynamic Proxy

  • 프록시는 타겟 코드의 수정없이 접근제어 혹은 부가기능을 추가하기 위해 주로 사용된다. 하지만 프록시를 사용하기 위해서는 대상 클래스 수만큼의 프록시클래스를 하나하나 만들어줘야하고 그 안에 들어가는 반복되는 코드 때문에 코드중복이라는 단점이 있다. 이를 보완하여 컴파일 시점이 아닌 런타임 시점에 프록시 클래스를 만들어주는 방식이

Dynamic Proxy

  • Dynamic Proxy란? Proxy 객체를 직접 생성이 아닌 Runtime에 interface를 구현하는 Class or 인스턴스를 만들어 내는 것

  1. Proxy 객체 정의하기 위한 Class Loader를 지정(객체가 구현할 interface에 Class Loader를 얻어오는 것이 일반적)
  2. newProxyInstance()를 통해 생성 될 Proxy 객체가 구현할 interface를 정의
  3. 메소드 호출을 디스패치하기 위한 호출 핸들러.(디스패치: 어떤 메소드를 호출할 것인가를 결정하여 그것을 실행하는 과정을 이야기함)
profile
기록 블로그

0개의 댓글