[Java] Java8에서 새롭게 추가된 개념 : 함수형 프로그래밍

정재현·2024년 1월 18일

Java

목록 보기
38/43
post-thumbnail

함수형 프로그래밍

  • 함수를 변수처럼 사용하겠다는 아이디어
    • 함수에 인자로 넘길 수 있다.
    • 함수의 결과로 반환 가능
    • 값을 수정할 수 있다.
    • 값을 변수에 대입할 수 있다.

핵심 아이디어

  • 특정한 데이터에 의존하지 않고, 관련없는 데이터를 변경하지도 않으며, 결과값이 오직 입력값에만 영향을 받는 함수를 순수함수라고 한다.
  • 즉, 외부에 어떠한 영향력을 끼지지 않으면 순수함수

효율

  • 코드의 재사용성 높이기
  • 코드를 유지보수, 확장하기 쉬워짐
  • 코드를 신뢰성 있게 사용하기 쉬워짐

효용

  • 검증이 쉬움(검증이 필요한 부분만 검증 가능)
  • 성능 최적화가 쉽다(특정 input에 대한 output을 재사용 할 수 있다 = 캐싱)
    - 캐싱 : 어떤 input을 넣은면 항상 동일한 output이 나옴
  • 동시성 문제를 해결하기 쉽다(함수는 다른 값의 변경을 야기하지 않음)

Java8에서 지원하는 기능

  • 람다(익명함수) : 함수를 변수처럼 사용 가능하게 하는 함수형 프로그래밍

    • 익명함수 : 이름이 없는 함수
    • 함수형 프로그래밍 아이디어
      • 함수를 값으로 사용할 수 있으며 파라미터에 전달 가능
      • 변수에 대입하기와 같은 연산들이 가능
  • 스트림 : 컬렉션의 흐름같은 것(간결하고, 유연하고, 성능이 좋은 코드를 작성 가능)

    • 데이터 처리연산을 지원하도록 소스에서 추출된 연속된 요소
    • 컬렉션이 데이터를 저장하거나 접근하는데 초점을 맞춘 인터페이스라면,
      스트림은 데이터를 처리하는데 초점을 맞춘 인터페이스

    컬렉션의 반복을 멋지게 처리하는 일종의 기능이자, 멀티스레드 관련 코드를 구현하지 않아도 알아서 병렬로 추가해주는 기능이라고 생각하면 됨.


요약

  1. 함수형 프로그래밍의 아이디어와 문법을 자바8에서 지원한다.
  2. 함수형 프로그래밍의 아이디어인 (함수를 값으로 다루거나, 다른 함수에 넘길 수 있다)와 같은 일들이 가능하다.
  3. 함수형 프로그래밍의 문법인 익명함수(람다) 문법을 지원한다.
  4. 스트림이라는 컬렉션의 흐름과 같은 것을 지원한다.
  5. 스트림 기능의 지원으로 우리는 더 간결하고, 유연하고, 성능좋은 코드를 작성 할 수 있다.

profile
공부 기록 보관소

0개의 댓글