Java8 API에 추가된 여러가지 메소드 중 자주 사용하는 메소드를 알아보자.List names = new ArrayList();name.add("Amy");name.add("Bob");name.add("Chris");name.add("Doby"); IterableforEach()순회 기능아무것도 리턴하지 않기 때문에 Consumer 인터페이스가 들어온다.//1names.forEach(s -> { System.out.println(s);});//2names.forEach(System.out::println); spliterator()split 기능이 있는 iterator보통 iterator는 hasNext() 를 사용하는데, spliterator는 tryAdvance()를 사용한다.역시 Consume..
Java
인터페이스 기본 메소드인터페이스에 있는 추상 메소드 -> 인터페이스를 implements 할 때 구현해야한다.구현 완료된 후 인터페이스의 특정 메소드를 추가한다면? 해당 인터페이스의 모든 구현체에 컴파일 에러 발생! 인터페이스내에서 default 키워드를 사용하여 기본 메소드로 추가한다면 해당 기능을 구현하지 않아도 된다. public interface Foo { void printName(); String getName(); default void printNameUpperCase() { System.out.println(getName().toUpperCase()); }}public class DefaultFoo implements Foo { String name;..
메소드 참조(레퍼런스)람다 표현식을 구현할 때 쓸 수 있는 방법기존 메소드에 이미 기능이 구현되어있는 경우, 해당 메소드를 참조하여 함수형 인터페이스의 구현체로 쓰게 된다. public class Greeting { private String name; public Greeting() { } public Greeting(String name) { this.name = name; } public String hello(String name) { //instance method return "hello " + name; } public static String hi(String name) { //static method ..
람다 표현식이란? (lambda)(인자 리스트) -> { 함수 몸체 } 인자 리스트일반적인 함수 표현과 비슷하게 () 안에 인수 목록을 작성한다.인자 없을 때 : ()인자 한 개 일 때 : (a) 또는 a --> 특수하게 인자가 한 개 일 때에는 괄호 생략이 가능하다.인자 여러개일 때 : (a, b)컴파일러가 추론하기 때문에 인자의 타입은 생략 가능하나, 원하면 명시할 수 있다. (Integer a, String b) 바디화살표 오른 쪽에 함수 본문을 정의하고, { } 를 사용해서 묶는다. 한 줄인 경우에는 { } 를 생략할 수 있다.return도 생략 가능하다. 변수 캡처 (Variable Capture)int baseNum = 10;//로컬 클래스class LocalClass { void printB..
Java가 기본으로 제공하는 함수형 인터페이스자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스들이 java.lang.function 패키지에 있다.주요 인터페이스를 살펴보자. Function : R apply(T t)T 타입을 받아서 R 타입을 리턴하는 함수 인터페이스//익명 내부 클래스 버전public class Plus10 implements Function { @Override public Integer apply(Integer i) { return i+10; }}public class Result { public static void main(String[] args) { Plus10 plus10 = new Plus10(); System.out...
Functional Interface어떤 인터페이스안에 추상 메소드가 딱 하나만 있을 때, 함수형 인터페이스라고 한다.추상 메소드가 두개 이상일 때에는 함수형 인터페이스가 아니다. 다른 형태의 메소드는 상관하지 않는다!@FunctionalInterface //자바에서 제공하는 어노테이션public interface FuncIfTest { void doIt(); //추상 메소드 1개 static void printName() { //추상 메소드 x System.out.println("cy"); } default void printBirthday() { //추상 메소드 x System.out.println("0210"); }} 인터페이스에서는 abstrac..