모던 자바 인 액션 chap 18

doxxx·2022년 8월 15일
0

모던자바인액션

목록 보기
13/14
post-thumbnail

Chapter 18. 함수형 관점으로 생각하기

18.1 시스템 구현과 유지보수

  • 함수형 프로그래밍은 부작용 없음과 불변성을 제공한다.

18.1.1 공유된 가변 데이터

  • 부작용의 개념: 함수 내에 포함되지 못한 기능
    • 자료구조를 고치거나 필드에 값을 할당(setter 메서드 같은 생성자 이외의 초기화 동작)
    • 예외 발생
    • 파일에 쓰기 등의 I/O 동작 수행

18.1.2 선언형 프로그래밍

  • 두가지 시스템의 구현 방식
    • "어떻게"에 집중하는 명령형 프로그래밍
    • "무엇을"에 집중하는 선언형 프로그래밍
      • 구현 방법은 라이브러리가 결정한다.
        • 내부 반복이라고 한다.

18.1.3 왜 함수형 프로그래밍인가?

함수형 프로그래밍은 선언형 프로그래밍을 따르는 대표적인 방식이다.

18.2 함수형 프로그래밍이란 무엇인가?

  • 함수형 프로그래밍: 함수를 이용하는 프로그래밍

  • 함수: 수학적인 함수.

    • 0개 이상의 인수를 가지며, 한 개 이상의 결과를 반환하지만 부작용이 없어야 한다.
  • 수학적 표현만 사용하는 방식을 순수 함수형 프로그래밍이라 한다.

  • 시스템의 다른 부분에 영향을 미치지 않는다면 내부적으로는 함수형이 아닌 기능도 사용하는 방식을 함수형 프로그래밍이라 한다.

18.2.1 함수형 자바

  • 메서드의 바디를 잠금(Lock)으로써 함수형을 달성할 수 있다.

    • 하지만 이 방식은 메서드를 병렬로 호출할 수 없게 된다.
  • 함수나 메서드는 지역변수만을 변경해야 함수형이라 할 수 있다.

  • 함수나 메서드에서 참조하는 객체가 있다면 그 객체는 불변 객체여야 한다.

  • 객체의 모든 필드가 final이어야 하고, 모든 참조 필드는 불변 객체를 직접 참조해야 한다.

  • 예외적으로 메서드 내에서 생성한 객체의 필드는 갱신할 수 있다.

    • 외부에 노출되지 않아야 하고 다음에 메서드를 다시 호출한 결과에 영향을 미치지 않아야 한다.

18.2.2 참조 투명성

  • 참조 투명성은 기억화 또는 캐싱을 통해 최적화

18.2.3 객체지향 프로그래밍과 함수형 프로그래밍

18.2.4 함수형 실전 연습

static 쓰지 마라

18.3 재귀와 반복

재귀는 비싸다.

0개의 댓글

관련 채용 정보