Backend/Java

Java8

땅지원 2022. 8. 5. 09:12

1. 람다 표현식(lambda expresssion) : 함수형 프로그래밍(익명함수)

Q. 함수랑 메소드랑 다른가?

함수 : 특정 작업을 수행하는 독립적인 존재(알고리즘 할 때 따로 구현하는 function() 생각하면 될 듯)

메소드(클래스함수) : 클래스, 구조체, 열거형에 포함되어 있는 함수, 해당 클래스에 대한 객체가 생성되어 사용 가능

 

 

★ 자바에서는 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성할 수 있는 클래스를 익명 클래스라 함

따라서 자바에서 람다 표현식은 익명 클래스와 같다고 할 수 있다

new Object() {
    int min(int x, int y) {
        return x < y ? x : y;
    }
}

(x,y) -> x<y ? x : y //람다 표현식

함수형 인터페이스(functional interface)

람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입

함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야 한다

@FunctionalInterface

위와 같은 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식한다

자바 컴파일러는 이렇게 명시된 함수형 인터페이스에 두 개 이상의 메소드가 선언되면 오류를 발생시킨다

@FunctionalInterface
interface Calc { // 함수형 인터페이스의 선언
    public int min(int x, int y);
}

public class Lambda02 {

public static void main(String[] args){
        Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현
        System.out.println(minNum.min(3, 4));  // 함수형 인터페이스의 사용
    }
}

 

 

 

2. 스트림 API(stream API) : 데이터의 추상화 (iteraotr로 검색해서 사용하는 코드 재사용성 증가)

 

3. java.time 패키지 : Joda-Time을 이용한 새로운 날짜와 시간 API(Calander 개선)

 

4. 나즈혼(Nashorn) : 자바스크립트의 새로운 엔진(자바스크립트의 기본 엔진으로는 모질라의 리노(Rhino) 사용성능과 메모리 관리 면에서 크게 개선된 스크립트 엔진 Nashorn 변경)

 

5. 인터페이스에 default로 구현된 메소드를 사용할 수 있다