본문 바로가기

java/자바

[chap18] 람다식

 

 

리스트라는 컬렉션이 있다면..

데이터를 여러개 모아뒀을텐데…

0개~10만개… 병렬처리가 안되겠지.. 단일 쓰레드로 돌면.. 손해지?

 

 

그걸 이용하면 빠르게 데이터를 얻겠지..!!

 

병렬적으로 데이터를 처리 하고싶어?

정보를 줄때 사용하는 것이 람다식이다!

 

 

객체 지향에서는 함수는 독립적으로 존재하지 않는다.

클래스 내부에 함수가 존재한다.

C언어는 함수가 독립적으로 존재한다.

 

 

인터페이스를 익명이너클래스로 했던 거를

람다식으로 대신할 있다.

모든 것을 대신할 없다.

함수적 인터페이스만 가능하다

 

함수적 인터페이스: 인터페이스 안에 1개의 미완성 함수만 있는 .

2개가 있으면 미완성 함수 중에 어떤 거를 부른지 모른다.

 

람다식: 함수적 인터페이스를 구현 것이다.

리턴 타입은 고정이다.

 

인터페이스에서 이미 타입을 정해놓음

변수의 이름만 변경 있다.

 

함수적 인터페이스를 줄인 상태이다.

 

람다식: 비어있는 함수를 정의할 있는 공간

 

 

줄이는 방법

메서드 이름까지 지움

앞에 있는 부분 지우고~

 

앞부분 지우고

화살표로 지운다

 

리턴이 하나일때는

생략이 가능하다.

 

 

미완성 메소드 있다.

A라는 인터페이스

 

B라는 클래스

 

A -> B 연달아서 호출..했네??

abc() 호출 --> B 객체 생성, bcd() 호출

==> A a = b::bcd;

                객체::메서드

 

 

A라는 인터페이스

A 익명함수로 abc() 내용을 정의한다..

내용을 람다식으로 채운다

System 이라는 객체는 이미 만들어져 있음

A a = System.out::println;

 

 

정적메서드가 있다.

클래스이름::메서드

 

거슬러 올라갔더니 static 아니네?

객체를 매개변수로 넘겨줄테니 bcd()함수를 호출해서 사용해라

전달해준 String 객체를 만들어서 전달해줌

타입2 예제이다.

 

배열크기의 배열을 리턴한다.

 

A a = int[]::new;

a.abc(9) => new int[9]

 

a.abc(3) 호출하면 2번째 생성자가 호출된다.

a.abc() 호출하면 1번째 생성자가 호출된다.