기본 콘텐츠로 건너뛰기

Chapter14 람다식

 

람다식

람다식 기본 문법 - (타입 매개변수, ...) -> { 실행문; ...}

(int a) -> {System.out.println(a);}
//매개 변수 타입은 런타임 시에 대입되는 값에 따라 자동으로 인식되기에 타입을 제거
(a) -> {System.out.println(a);}
//하나의 매개 변수만 있으면 괄호()를 생략, 하나의 실행문만 있다면 중괄호{}도 생략
a -> System.out.println(a)
//매개 변수가 없다면 람다식에서 매개 변수 자리가 없어지므로 ()를 반드시 사용
() -> {실행문; ...}
//중괄호{}를 실행하고 결과값을 리턴해야 할때는
(x,y) -> {return x+y;};
//중괄호{}에 return문만 있을 경우, return문 생략
(x,y) -> x+y

함수적 인터페이스(@FunctionalInterface) - 두 개 이상의 추상 메소드가 선언된 인퍼테이스가 아닌 하나의 추상 메소드가 선언된 인터페이스, @FunctionalInterface어노테이션을 붙이면 두 개 이상의 추상 메소드가 선언되면 오류가뜸

클래스 멤버와 로컬 변수 사용 - 클래스의 멤버(필드와 메소드)는 제약 사항없이 사용 가능하지만, 로컬 변수는 제약 사항이 따름

        클래스의 멤버 사용 - 익명 객체 내부에서 this는 익명 객체의 참조지만, 람다식에서 this는 람다식을 실행한 객체의 참조

        로컬 변수 사용 - 바깥 클래스의 필드나 메소드는 제한 없이 사용 가능하지만, 메소드의 매개 변수 또는 로컬 변수를 사용하면 이 두 변수는 final 특성을 가져야 함, 따라서 매개 변수 또는 로컬 변수를 람다식에서 읽는 것은 허용 되지만, 람다식 내부 또는 외부에서 변경할 수 없음

표준 API의 함수적 인터페이스 - 함수적 인터페이스는 java.util.function표준 API 패키지로 제공함

            Consumer 함수적 인터페이스 - 리턴값이 없는 accept() 메소드를 가짐
            Supplier 함수적 인터페이스 - 매개 변수가 없고 리턴값이 있는 getXXX() 메소드를 가짐

            Function 함수적 인터페이스 - 매개값과 리턴값이 있는 applyXXX() 메소드를 가짐

            Operator 함수적 인터페이스 - Function과 동일하게 매개 변수와 리턴값이 있는 applyXXX()메소드를 가지지만, 이 메소드들은 매개값을 이용해서 연산을 수행 후 동일한 타입으로 리턴값을 제공

            Predicate 함수적 인터페이스 - 매개 변수와 boolean 리턴값이 있는 testXXX() 메소드를 가짐

    

andThen()과 compose() 디폴트 메소드 - Consumer, Function, Operator 종류의 함수적 인터페이스는 andThen()과 compose() 디폴트 메소드가 있음, 첫 번째 처리 결과를 두 번째 매개값으로 제공해서 최종 결과값을 얻을 때 사용
            andThen() - 인터페이스A.andThen(인터페이스B) : 인터페이스A부터 처리하고 결과를 인터페이스B의 매개값으로 제공해서 인터페이B는 최종 결과를 리턴
            compose() - 인터페이스A.compose(인터페이스B) : andThen()과 순서가 반대
and(), or(), negate() 디폴트 메소드 - Predicate 종류의 함수적 인터페이스는 and(), or(), negate() 디폴트 메소드를 가짐(&&, ||, !와 같음)
isEqual() 정적 메소드 - test() 매개값인 sourceObject와 isEqual()의 매개값인 targetObject를 java.util.Objects 클래스의 equals()의 매개값으로 제공하고, Objects.equals(sourceObject, targetObject)의 리턴값을 얻어 새로운 Predicate<T>를 생성함
Predicate<Object> predicate = Predicate.isEqual(targetObject);
boolean result = predicate.test(sourceObject);
minBy(), maxBy() 정적 메소드 - BinaryOperator<T> 함수적 인터페이스는 매개값으로 제공되는 Comparator를 이용해서 최대 T와 최소 T를 얻는 BinaryOperator<T>를 리턴
메소드 참조 - 메소드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 불필요한 매개 변수를 제거하는 것이 목적
(left, right) -> Math.max(left, right);
//메소드 참조(Math :: max)
IntBinaryOperator operator = Math :: max;
            정적 메소드 참조 - 정적 메소드 참조시 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술
                        클래스 :: 메소드
            인스턴스 메소드 참조 - 인스턴스 메소드일 경우 먼저 객체를 생성한 다음 참조 변수 뒤에 :: 기호를 붙이고 인스턴스 메소드 이름을 기술
                        참조변수 :: 메소드
            매개 변수의 메소드 참조 - 람다식에서 제공되는 a 매개 변수의 메소드를 호출해서 b 매개 변수를 매개값으로 사용 할 때 a의 클래스 이름 뒤에 :: 기호를 붙이고 메소드 이름을 기술
                        (a, b) -> { a.instanceMethod(b); }
                        클래스 :: instanceMethod

            생성자 참조 - 객체를 생성하고 리턴하도록 구성된 람다식은 생성자 참조로 대치, 클래스 이름 뒤에 :: 기호를 붙이고 new 연산자를 기술
                        (a, b) -> { return new 클래스(a, b); }
                        클래스 :: new

댓글

이 블로그의 인기 게시물

네이버페이 리뷰 API 연동

네이버 페이 리뷰 API 네이버 측에 문의 하면 sandbox용 인증키를 받습니다. AccessLicense, SecretKey 그리고 받은 파일의 4. WSDL을 열어 주시고 Naver_Pay_API_MallService41_WSDL(sandbox)_20140925파일 압축 풀어주세요 그럼 파일이 BaseType.xsd, CheckoutAPI.wsdl, MallServiceMessage.xsd 세개의 파일이 나옵니다. 네이버페이 리뷰 리스트 가져오는 메소드는 getPurchaseReviewList입니다. BaseType.xsd를 켜신 후 MallID로 검색하면 <xs:complexType name="purchaseReview"> 안쪽의 MallID밑에  <xs:element minOccurs="0" name="PurchaseReviewClassType" type="xs:string"/> 추가해주세요 포토 리뷰를 가져오는 파라미터 값을 보내기 위해서 입니다. <xs:element minOccurs="0" name="Content" type="xs:string"/> 이값도 필요합니다 이미지 경로를 가져오기 위해서 입니다. <xs:complexType name="purchaseReview">     <xs:sequence>       <xs:element minOccurs="0" name="CreateYmdt" type="xs:dateTime"/>       <xs:element minOccurs="0" name="MallID" type="xs:string"/>   <xs:element minOccurs="0" nam...

mac 맥 맥북 Brew 완전 삭제

맥북에서 Brew 초기화 Brew를 써서 h2를 쓰려고 하는데 brew install h2가 안되서 이리 저리 알아보다가 완전 삭제 후 다시 설치 하니까 되서 그 방법을 남겨놈 1. 터미널에 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)" 입력후 y랑 뭐 비번.. 2. /usr/local 폴더에서 Homebrew 폴더 삭제 rm -rf Homebrew/ 권한설정으로 잘.....삭제하고 3. 다시 설치 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 좀 오래걸리니까 기다려야한다는걸 배움... 출처.... https://discourse.brew.sh/t/error-no-formulae-found-in-taps/8331/9

OCI에 서버 세팅하기

    1. 서버 기본 준비      OCI A1 인스턴스를 만들고 Ubuntu 같은 OS를 설치합니다. A1은 ARM 기반이므로, 사용하는      Docker 이미지와 의존성이 linux/arm64를 지원하는지 먼저 확인해야 해요. 특히 일부 오래된      DB 이미지나 네이티브 모듈은 주의가 필요합니다.   2. 네트워크와 보안 설정      OCI 보안 목록/NSG와 서버 방화벽에서 최소한 80, 443, 22 포트를 정리합니다.       - 80: HTTP 및 인증서 발급       - 443: HTTPS       - 22: SSH 관리용 — 가능하면 내 IP만 허용      앱 컨테이너의 포트(예: 3000, 8080, DB 포트)는 인터넷에 직접 열지 않는 게 핵심입니다.   3. Docker 운영 기반 구성      서버에 Docker와 Docker Compose 플러그인을 설치하고, 프로젝트별 디렉터리를 분리합니다.      예를 들면:      /srv/apps/        promeditor/        other-project/        proxy/      각 프로젝트는 자기 compose.yml, 환경변수 파일, DB 볼륨을 독립적으로 가지게 합니다.   4. 공용 Nginx 리버스 프록시 구성      Nginx는 한 개만 앞단에서 실행하고, 도메인/서브도메인에 따라 내부 컨테이너로 프록시합니      다...