함수형 프로그래밍

date
Mar 22, 2024
slug
functional-programming
status
Published
tags
PL & Compiler
summary
type
Post

고차함수 - p28

함수형 프로그래밍의 핵심 목표 중 하나는 문제의 핵심에 도달하는 것 → 언어로 개념을 간결하게 표현할 수 있어야 한다.
아래 코드처럼 고차 함수를 사용하여 수준 높은 추상화 작업을 수행할 수 있다.

map

flatten

Option 자료구조 예제에서 사용되는 고차 함수이다. Some 인스턴스를 병합하고 None을 버린다.

flatMap

컬렉션을 매핑한 다음 평면화를 수행하는 고차 함수이다.
두 코드의 결과는 동일하며 설명한대로 map 이후에 flatten하는 작업을 flatMap 이 수행한다.

foldLeft

시작 요소와 요소 쌍에 대해 정의된 이항 연산 수행 두 요소를 결합하는 데 사용되는 모든 연산을 컬렉션의 모든 요소에 적용하는 방법 - p195

filter

지연평가 - p29

대중적으로 사용되는 대부분 언어는 지연이 발생하지 않고 즉시 평가된다. → 함수가 호출되는 즉시 평가 지연 평가는 그 값을 실제로 사용하기 전까지 호출하지 않기 때문에 즉시 평가보다 적게 수행하는 경우가 많으며, 프로그램의 속도가 빨라질 수 있다.

범주론 - p50

todo

대상(Object)과 사상(morphism) - p54

todo

펑터 (Funtor)

todo

모노이드 (Monoid)

foldLeft는 모노이드의 개념에서 파생된다. 모노이드가 있으면 foldLeft를 구현할 수 있다. - p73
result, i 등 값이 지속적으로 변한다. - 상태가 변한다. sumAll은 모노이드를 사용하고 상태를 변경하지 않는 함수형 버전이다.
고계 함수(fold, reduce 등)를 활용하여 간결하고 직관적인 코드를 만들 수 있었다.

자연 변환(Natural Transformation)

todo

모나드 (Monad)

todo

함수형 자료구조

Option 자료 구조

타입이 없음을 의미하는 null, 이로 인해 발생하는 NullPointerException 이 발생하지 않게 하기 위해 Option이라는 자료 구조를 만들었다.
Option 에는 값이 존재할 때 Some으로 감싸져 있으며, 값이 존재하지 않을 때 None 타입으로 처리한다. 또한 null 이 아닌 항상 타입(Some or None )이 존재하기 때문에 위에서 언급한 예외가 발생하지 않는다.
Scala 외에도 Java, C# 등 null을 유연하게 처리하기 위한 문법들을 제공하고 있다. - Optional, Nullable, ? 키워드

Either 자료 구조

Either는 Right, Left 로 구분되어 상황에 맞는 동작을 분리할 수 있다. RightOptionSome 타입, Left 는 모든 타입을 래핑할 수 있는 OptionNone 포지션이라고 생각하면 된다.

Java의 Stream

불변 데이터의 파이프라인을 만들고 각 단계에서 해당 데이터를 변환하는 방법이다. → 데이터를 순환하면서 변수를 변경시키는 방식보다 오류 발생 가능성이 훨씬 낮다.
고차 함수를 사용하면 컬렉션을 반복하고 상태를 변경하는 것보다 값 컬렉션(value collection)을 간단하고 확실하게 처리할 수 있다. - p111

동시성 (Concurrency) - p135

상태의 변화가 없으면 시간을 무시할 수 있다. - 항상 같은 값임을 증명할 수 있기 때문에 신뢰할 수 있다. 예를 들어 2개의 서로 다른 쓰레드가 같은 공간을 공유하며, mutable한 값이라면 신뢰할 수 없다. - self-learning-cs

액터 (Actor)

 

© hyuunnn 2024