- 클래스 멤버 (필드, 메소드) : 제약 사항 없이 사용 가능.

this -> 일반적으로 익명 객체 내부에서 this는 익명 객체의 참조지만(즉 익명 객체 생성할 때 {} 안에 변수),                람다식에선 this는 람다식을 실행한 객체의참조(전체 클래스)

 

- 로컬 변수 사용 : 제약 사항 있음 -> 메소드의 매개 변수 또는 로컬 변수 사용 시 final 특성 가져야 함.

why? 메소드 내에서 생성된 익명 객체는 메소드 실행 끝나도 힙 메모리에 존재. 계속 사용 가능 
       하지만 매개 변수나 로컬 변수는 메소드 실행이 끝나면 스택 메모리에서 사라지기 때문에 익명 개체에서 사용할 수 없어짐
-> 그래서 final로 선언하면 됨(생략 시 알아서 final로 됨) -> 알아서 읽기는 되지만 변경 안됨
  ex) ulv.method(20); -> void method(int arg){
                                       int localVar = 40; -> 여기서 arg,localVar은 변경 불가
                                }

 


- 표준 API의 함수적 인터페이스

 : 자바에서 제공되는 표준 API에서 한개의 추상 메소드를 가지는 인터페이스들은 모두 람다식을 이요해 익명 구현 객체 표현 가능
EX) Thread thread = new Thread(()->{
                                   ......//실행문
                          }); thread.start();


- java.util.function -> Consumer : 매개값 있고 리턴값 없음


Supplier : 매개값 없고 리턴값 있음
Function : 매개값 있고 리턴값 있음 (주로 매개값을 리턴값으로 매핑(타입변환))
Operator : 매개값 있고 리턴값 있음 (주로 매개값 연산하고 결과 리턴)
Predicate : 매개값 있고 리턴값 boolean (매개값 조사해 true, false 리턴)

 



- 메소드 참조

 : 메소드를 참조해 매개 변수의 정보 및 리턴 타입 알아내어 람다식에서 불필요한 매개 변수를 제거하는 것 목적
ex) 두 개의 값을 받아 큰 수 리턴하는 Math 클래스의 max() 정적 메소드 호출
    (left, right) -> Math.max(left,right);
    IntBinaryOperator operator = Math :: max; //메소드 참조한다는 의미

 

- 정적 메소드 : 클래스 이름 뒤에 :: 기호 붙이고 정적 메소드 이름 기술하면 됨 클래스 :: 메소

- 인스턴스 메소드 : 먼저 객체 생성한 다음 참조 변수 뒤에 :: 기호 붙이고 인스턴스 메소드 이름 기술하면 됨

ex) 참조변수 :: 메소드

 

- 매개 변수의 메소드 참조 : 메소드는 람다식 외부의 클래스 멤버일 수도 있고, 람다식에서 제공되는 매개변수 일수도 있다.
    (a,b)->{a.instanceMethod(b);} //a 매개변수의 메소드 호출해 b 매개 변수를 매개 값으로 사용하는 경우도 음
     = 클래스 :: instanceMethod 

 


- 생성자 참고 : 메소드 참조는 생성자 참고도 포함한다.  = 생성자를 참고한다는 것은 객체 생성 의미
메소드 호출로 구성된 람다식을 메소드 참조로 대치할 수 있듯이, 단순히 객체를 생성하고 리턴하도록 구성한 람다식은 생성자 참조로 대치 가능
(a,b) -> {return new 클래스(a,b);}      = 클래스 :: new

 

 

 

-<이것이 자바다2>. 한빛미디어  

'JAVA' 카테고리의 다른 글

람다식  (0) 2019.06.20
제네릭 예제_학생 성적 입출  (0) 2019.06.20
제네릭 예제_제네릭 클래스  (0) 2019.06.20
제네릭 예제  (0) 2019.06.20
제네릭  (0) 2019.06.20

+ Recent posts