함수형 사고, 열심히보다는 현명하게

함수형 사고, 열심히보다는 현명하게

해당 게시글은 를 읽고 공부한 내용을 정리한 것입니다.

저작권 문제가 발생할 시 해당 글은 삭제됩니다 :<

이전 글은 함수형 사고, 양도하라에서 보실 수 있습니다.

메모이제이션

  • 연속해서 사용되는 연산 값을 함수 레벨에서 캐시하는 것을 지칭
  • 주어진 매개변수를 키 값으로 하는 캐시에 저장
    • 이후 같은 매개변수가 호출되면, 연산을 수행하지 않고 캐시의 값 리턴
  • 시간이 많이 걸리는 연산을 반복적으로 사용해야만 할 때 유용하다

캐싱

  • 함수가 순수해야 한다
    • 부수효과가 없고
    • 가변 클래스 필드를 참고하지 않고
    • 리턴 값 외에는 아무 값도 쓰지 않아야 하고
    • 주어진 매개변수에만 의존하는 것

내부 캐싱

비효율적

외부 캐싱

내부 캐싱과 비교해 성능이 향상되나, 코드의 복잡도가 증가하며 유지보수성이 떨어진다

그래서 등장한 메모이제이션

메모이제이션은 메타함수를 적용한 것

  • 리턴 값에 적용하는 게 아니라, 함수에 무언가를 적용
    • 특정 함수를 메모제이션한 뒤, 새로운 변수에 할당하는 식

게으름

  • 필요할 때까지 판단을 미룸
  • 게으른 컬렉션을 사용하면 무한 수열의 모델링이 가능
  • 게으름을 사용하면 저장 사이즈가 작아짐
  • 런타임에 조금 더 효율적인 코드 작성 가능

방법은 두 가지

  • 게으른 판단을 하거나
  • 게으른 뷰를 만들거나

다음 글은 함수형 사고, 진화하라에서 보실 수 있습니다.