함수형 프로그래밍과 람다식
함수형 프로그래밍 개요
- 계산을 수학적 함수의 평가로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다.
- 함수형 프로그래밍은 프로그램을 오직 순수 함수들로만 작성되어진다.
- 순수 함수으로 모든 입력이 입력으로만, 모든 출력이 출력으로만 사용된다. (내가 함수를 실행하기 위해 값을 넣으면 )
- 함수형 프로그래밍은 대입문이 없는 프로그래밍이다.
함수형 프로그래밍 특징
- 함수 실행동안 변수 할당 값은 불변이다. 변수에는 새로운 값만 설정할 수 있으며 값이 설정이 되면 변경할 수 없다.
- 1급 객체: 1급 함수라고도 하며, 함수를 변수나 자료 구조안에 할당 할 수 있고, 인자로 전달하거나 리턴 값으로 사용할 수 있는 개체를 의미한다.
- 고차 함수: 함수의 인자로 함수를 넘기거나, 함수를 리턴하는 함수. 1급 함수를 지원한다는 의미는 고차함수를 사용 할 수 있다는 의미이다.
- 익명함수: 자바에서는 람다는 익명 함수이며, 인수의 리스트와 함수의 본문만 가질 수 있는 함수이다.
- 코드를 간결하게, 가독성을 높여 로직에 집중한다. 람다,스트림 API를 통해 보일러 플레이트(별 수정 없이 반복적으로 사용되는 코드)를 제거하고 내부에 직접적인 함수 호출을 통해 가독성을 높인다.
- 동시성 작업을 보다 쉽고 안전하게 구현할 수 있다.
함수형 인터페이스
- 단일 abstract 메서드를 가지는 인터페이스로 함수형 인터페이스 지정을 위해서 @FunctionalInterface 어노테이션이 도입되었다.
- 단일 메서드 구현으로 람다 표현식을 이용해 함수로 구현할 수 있게 된다.
- @FunctionalInterface 어노테이션이 아니더라도 추상 메서드가 하나인 인터페이스는 함수형 인터페이스로 처리 됩니다.
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
- 함수 실행동안 변수 할당 값은 불변이다. 변수에는 새로운 값만 설정할 수 있으며 값이 설정이 되면 변경할 수 없다.
- 1급 객체: 1급 함수라고도 하며, 함수를 변수나 자료 구조안에 할당 할 수 있고, 인자로 전달하거나 리턴 값으로 사용할 수 있는 개체를 의미한다.
- 고차 함수: 함수의 인자로 함수를 넘기거나, 함수를 리턴하는 함수. 1급 함수를 지원한다는 의미는 고차함수를 사용 할 수 있다는 의미이다.
- 익명함수: 자바에서는 람다는 익명 함수이며, 인수의 리스트와 함수의 본문만 가질 수 있는 함수이다.
- 코드를 간결하게, 가독성을 높여 로직에 집중한다. 람다,스트림 API를 통해 보일러 플레이트(별 수정 없이 반복적으로 사용되는 코드)를 제거하고 내부에 직접적인 함수 호출을 통해 가독성을 높인다.
- 동시성 작업을 보다 쉽고 안전하게 구현할 수 있다.
함수형 인터페이스
- 단일 abstract 메서드를 가지는 인터페이스로 함수형 인터페이스 지정을 위해서 @FunctionalInterface 어노테이션이 도입되었다.
- 단일 메서드 구현으로 람다 표현식을 이용해 함수로 구현할 수 있게 된다.
- @FunctionalInterface 어노테이션이 아니더라도 추상 메서드가 하나인 인터페이스는 함수형 인터페이스로 처리 됩니다.
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
과 같은 형태로 시용 할 수 있다.
람다식 개요
- java 8에서 가장 큰 변화는 람다이다. 한번 이상 실행 할 수 있는 코드 블록을 말하며 실제 구현에는 익명 함수 형태로 사용 된다.
- 함수형 인터페이스는 람다를 이용하여 인스턴스화 될 수 있다
Runnable r = () -> {System.out.println("functional interface");}
-
함수의 구조로 -> 와 같은 화살표 형태의 기호를 이용해서 매개변수를 함수의 바디로 전달하는 형태를 취한다.
(예) (int x) -> x+1 -> x 라는 인수로 호출하여 x+1을 변환하는 동작을 수행하는 코드를 구현 할 수 있다.
람다의 특성
- 메서드 처럼 특정 클래스에 종속되지 않고 파라미터,바디 리턴 값을 포함한다.
- 람다식을 메서드의 인자로 전달받거나 변수 값으로 저장할 수 있다.
- 일반적으로 다중 cpu를 활용하는 형태로 구현되어 병렬처리에 이득이다.
- (파라미터 리스트) -> {구문} 형태의 문법을 가진다.
default method 와 static method
-
java 8 부터 추가 되었으며, 인터페이스 변경을 자바8 이전에는 abstract메서드와 상수만 지원되었지만 메서드에 구현부를 포함 할 수 있게 되었고 이럴 경우 default로 선언하면 된다.
-
인터페이스 메서드가 구현부를 가질 수 있게 되면서 인터페이스 변경을 자유롭게 할 수 있습니다.
-
인터페이스가 변경되면, 인터페이스를 구현하는 모든 클래스들이 관련 메서드를 변경 구현 해야하는 문제를 해결하기 위해 추가되었다.
-
static 메서드도 구현이 가능해져 인터페이스에 유틸성 인터페이스를 제공할 수 있게 되었다.
Author And Source
이 문제에 관하여(함수형 프로그래밍과 람다식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@eden/함수형-프로그래밍과-람다식
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Runnable r = () -> {System.out.println("functional interface");}
함수의 구조로 -> 와 같은 화살표 형태의 기호를 이용해서 매개변수를 함수의 바디로 전달하는 형태를 취한다.
(예) (int x) -> x+1 -> x 라는 인수로 호출하여 x+1을 변환하는 동작을 수행하는 코드를 구현 할 수 있다.
- 메서드 처럼 특정 클래스에 종속되지 않고 파라미터,바디 리턴 값을 포함한다.
- 람다식을 메서드의 인자로 전달받거나 변수 값으로 저장할 수 있다.
- 일반적으로 다중 cpu를 활용하는 형태로 구현되어 병렬처리에 이득이다.
- (파라미터 리스트) -> {구문} 형태의 문법을 가진다.
default method 와 static method
-
java 8 부터 추가 되었으며, 인터페이스 변경을 자바8 이전에는 abstract메서드와 상수만 지원되었지만 메서드에 구현부를 포함 할 수 있게 되었고 이럴 경우 default로 선언하면 된다.
-
인터페이스 메서드가 구현부를 가질 수 있게 되면서 인터페이스 변경을 자유롭게 할 수 있습니다.
-
인터페이스가 변경되면, 인터페이스를 구현하는 모든 클래스들이 관련 메서드를 변경 구현 해야하는 문제를 해결하기 위해 추가되었다.
-
static 메서드도 구현이 가능해져 인터페이스에 유틸성 인터페이스를 제공할 수 있게 되었다.
Author And Source
이 문제에 관하여(함수형 프로그래밍과 람다식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@eden/함수형-프로그래밍과-람다식
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
java 8 부터 추가 되었으며, 인터페이스 변경을 자바8 이전에는 abstract메서드와 상수만 지원되었지만 메서드에 구현부를 포함 할 수 있게 되었고 이럴 경우 default로 선언하면 된다.
인터페이스 메서드가 구현부를 가질 수 있게 되면서 인터페이스 변경을 자유롭게 할 수 있습니다.
인터페이스가 변경되면, 인터페이스를 구현하는 모든 클래스들이 관련 메서드를 변경 구현 해야하는 문제를 해결하기 위해 추가되었다.
static 메서드도 구현이 가능해져 인터페이스에 유틸성 인터페이스를 제공할 수 있게 되었다.
Author And Source
이 문제에 관하여(함수형 프로그래밍과 람다식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eden/함수형-프로그래밍과-람다식저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)