함수형 프로그래밍과 람다식

3308 단어 JavaJava

함수형 프로그래밍 개요

  • 계산을 수학적 함수의 평가로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다.
  • 함수형 프로그래밍은 프로그램을 오직 순수 함수들로만 작성되어진다.
  • 순수 함수으로 모든 입력이 입력으로만, 모든 출력이 출력으로만 사용된다. (내가 함수를 실행하기 위해 값을 넣으면 )
  • 함수형 프로그래밍은 대입문이 없는 프로그래밍이다.

함수형 프로그래밍 특징

  • 함수 실행동안 변수 할당 값은 불변이다. 변수에는 새로운 값만 설정할 수 있으며 값이 설정이 되면 변경할 수 없다.
  • 1급 객체: 1급 함수라고도 하며, 함수를 변수나 자료 구조안에 할당 할 수 있고, 인자로 전달하거나 리턴 값으로 사용할 수 있는 개체를 의미한다.
  • 고차 함수: 함수의 인자로 함수를 넘기거나, 함수를 리턴하는 함수. 1급 함수를 지원한다는 의미는 고차함수를 사용 할 수 있다는 의미이다.
  • 익명함수: 자바에서는 람다는 익명 함수이며, 인수의 리스트와 함수의 본문만 가질 수 있는 함수이다.
  • 코드를 간결하게, 가독성을 높여 로직에 집중한다. 람다,스트림 API를 통해 보일러 플레이트(별 수정 없이 반복적으로 사용되는 코드)를 제거하고 내부에 직접적인 함수 호출을 통해 가독성을 높인다.
  • 동시성 작업을 보다 쉽고 안전하게 구현할 수 있다.

함수형 인터페이스

  • 단일 abstract 메서드를 가지는 인터페이스로 함수형 인터페이스 지정을 위해서 @FunctionalInterface 어노테이션이 도입되었다.
  • 단일 메서드 구현으로 람다 표현식을 이용해 함수로 구현할 수 있게 된다.
  • @FunctionalInterface 어노테이션이 아니더라도 추상 메서드가 하나인 인터페이스는 함수형 인터페이스로 처리 됩니다.
@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 메서드도 구현이 가능해져 인터페이스에 유틸성 인터페이스를 제공할 수 있게 되었다.

좋은 웹페이지 즐겨찾기