2020년 10월 2일 금요일

자바8, 함수형인터페이스, Consumer, Function, Predicate, Supplier(자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)

 

자바8, 함수형인터페이스, Consumer, Function, Predicate, Supplier(자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)


http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=773



https://youtu.be/gWIks_tLsFI





자바8, 함수형인터페이스, Consumer, Function, Predicate, Supplier(자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상/JAVA교육/자바교육/자바학원)

1. 함수형 인터페이스(Functional Interface)

추상메소드가 하나뿐인 인터페이스를 Functional Interface라고 한다.

자바8 부터는 람다식을 사용하여 함수형 인터페이스의 인스턴스를 나타낼 수 있다.

함수형 인터페이스에는 여러 개의 default 메서드가 있을 수 있다.

함수형 인터페이스의 인스턴스를 생성하기 위해 익명 클래스 등을 주로 사용했지만 람다식을 이용하면 편하다.

자바8에서 추가된 @FunctionalInterface 어노테이션은 함수형 인터페이스 임을 나타낸다.

Runnable, ActionListener, Comparable은 함수형 인터페이스 이며 자바8 이전에는 익명 클래스의 객체를 생성하거나 이러한 인터페이스를 구현해야 했지만 람다식을 이용하여 편리하게 구현할 수 있다.

Runnable 인터페이스의 인스턴스를 람다식을 이용하여 아래처럼 얻을 수 있다.

Runnable r = () -> System.out.println("oraclejava community");

쓰레드를 생성할 때 람다식을 이용할 수 있다.

new Thread( () -> System.out.println(“oraclejavacommunity”) )

[예제]

@FunctionalInterface

interface Worker {

public void work();

}

public class FITest {

static void execute(Worker worker) {

worker.work();

}

public static void main(String[] args) {

execute(new Worker() {

public void work() {

System.out.println("Hello~ 오라클자바커뮤니티");

}

});

execute( ()->System.out.println("Hello~ oraclejava community"));

}

}

2. java.util.function 패키지

함수형 인터페이스

java.util.function 패키지에는 몇가지 미리 정의된 함수형 인터페이스가 있다

Predicate: 하나의 매개변수를 주는 boolean형을 반환하는 test 메소드가 있다.

public interface Predicate<T> { boolean test(T t); }

Predicate<String> p = str -> str.isEmpty();

Boolean b = p.test(“ojc.asia”); //false

Consumer: 하나의 매개변수를 주는 void 형 accept 메소드가 있다.

public interface Consumer<T> { void accept(T t); }

Consumer<String> c = (s) -> System.out.println(s);

c.accept(“ojc.asia”); //ojc.asia

Function: T 유형의 인수를 취하고 R 유형의 결과를 반환하는 추상 메소드 apply가 있다.

public interface Function<T, R> { R apply(T t); }

Function<String, boolean> f = s -> s.isEmpty();

boolean b = f.apply(“ojc.asia”); //false

Supplier: 메소드 인자는 없고 T 유형의 결과를 반환하는 추상 메소드 get이 있다.

public interface Supplier<T> { T get(); }

Supplier<String> s = () -> “ojc.asia”;

String res = s.get(); //ojc.asia

UnaryOperator: 하나의 인자와 리턴타입을 가진다. T -> T

UnaryOperator<String> u = (s) -> “hello~ “ + s;

System.out.println(u.apply(“ojc.asia”)); //hello~ ojc.asia

//두 개의 인수, 동일한 타입의 결과를 반환하는 추상 메서드 apply가 있다.

BinaryOperator: A binary operator from (T, T) -> T

BinaryOperator bo = (s1, s2) -> s1 +”, ” + s2;

System.out.println(bo.apply(“Hello~”, “ojc.asia”));

3. 실습

package javatest;

import java.util.Arrays;

import java.util.List;

import java.util.function.Consumer;

import java.util.function.Function;

import java.util.function.Predicate;

import java.util.function.Supplier;

public class FITest2 {

public static void main(String[] args) {

List<String> cities = Arrays.asList("SEOUL","BUSAN","DAEGU","GWANGJU","JUNJU");

//하나의 매개변수를 주는 boolean형을 반환하는 test 메소드가 있다.

Predicate<String> p = (s)->s.startsWith("S");

for(String s: cities) {

if (p.test(s)) {

System.out.println("1. Predicate : S로 시작..." + s);

}

}

//하나의 매개변수를 주는 void 형 accept 메소드가 있다.

Consumer c = (s) -> {

if (s.toString().startsWith("S"))

System.out.println("2. Consumer : S로 시작..." + s);

};

cities.forEach(c);

//메소드 인자는 없고 T 유형의 결과를 반환하는 추상 메소드 get이 있다.

Supplier<String> s = () -> cities.toString();

System.out.println("3. Supplier : " + s.get());

//T 유형의 인수를 취하고 R 유형의 결과를 반환하는 추상 메소드 apply가 있다.

Function<String, Boolean> f = str -> str.startsWith("S");

for(String str: cities) {

if (f.apply(str)) {

System.out.println("4. Function : S로 시작..." + str);

}

}

}

}

1. Predicate : S로 시작...SEOUL

2. Consumer : S로 시작...SEOUL

3. Supplier : [SEOUL, BUSAN, DAEGU, GWANGJU, JUNJU]

4. Function : S로 시작...SEOUL



#자바함수형인터페이스, #함수형인터페이스, #자바Consumer, #자바Predicate, #자바Function, #자바Lambda,#람다식, #자바8, #자바8람다,#자바,#JAVA,#자바동영상,#자바강의,#자바교육,#자바강좌,#자바동영상강의,#추천자바강의,#추천자바강좌,#JAVA동영상,#JAVA강의,#JAVA강좌,#JAVA교육,#JAVA,#추천JAVA강의,#추천JAVA교육,#추천JAVA강좌,#자바소스,#자바온라인교육,#자바온라인강의



댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...