# Functor

14개의 포스트
post-thumbnail

Functor In Programming

Functor란 무엇인가? Generic 변수, 클래스, 구조체 등을 선언할 때, 해당 객체 내부에서 사용하는 타입을 고정하지 않고 임의의 타입을 사용할 수 있도록 하는 것 실제 사용하는 시점에 사용하는 타입을 결정한다. Type Constructor 새로운 데이터 타입을 만드는 틀. A라는 진짜 데이터가 있을 때, 이 값을 유지하면서 감쌀 수 있는 논리적 구조. 감싼다는 측면에서 바라보았을 때 이 정의에 부합하는 녀석들은 이런 것들이 있을 수 있겠다. Optional Array Dictionary Set Result Either Future Promise 그런데 그 "특정" 이라는 단어 자체가 임의의 값을 받을 수 있다는 것을 내포하고 있기 때문에 Generic으로 표현하는 것이 더 적합하다. Optional Array

2023년 8월 17일
·
0개의 댓글
·

[함수형 프로그래밍] 모나드

학문적으로 모나드를 이해해보려 했지만 짧은 시간에 모나드를 이해하기는 쉽지 않았다. 그래서 모나드가 주는 가치에 대해서 실제로 모나드가 어떻게 사용되는지에 대해서 알아보면 이해가 좀 더 쉬울 수 있다. 함수형 프로그래밍은 함수의 합성을 통해서 프로그램을 이어나가는 패러다임이다. 함수를 합성할때의 문제는 리턴타입과 다음 함수에 넘겨주는 인자가 맞추어 주는것에 있다. 모나드는 이 부분에서 함수가 합성을 이어나갈 수 있는 방법을 제시한다. 우리가 자주 사용하는 javascript 에서의 Array도 모나드이다. [1, 2] 배열은 은 모나드이고, 이 모나드에 map 매서드가 구현되어 있다. 하지만 2에서 처럼 배열에 아무것도 없으면 map 함수를 돌릴 수 없지만 애러가 나진 않는다. 즉, 값이 잘못들어왔을 때(지금의 경우는 map을 돌릴 값이 없을 때) 함수를 실행시켜줄지 어떻게 할지를 판단해주는 buffer 역할을 해주는게 모나드의 역할이다. 그럼 여기서 다시한번 모나드의 개념을

2022년 8월 15일
·
0개의 댓글
·

[C++] 함수 객체

1. 함수 객체란? 함수처럼 동작하는 객체이다. Function Object, 또는 Functor라고 불린다. 다르게 말하자면 객체(class 등)이 함수처럼 동작하도록 만들어주는 것이다. 이를 위해서는 연산자를 오버로딩하여 만들어 주어야 한다. 2. 간단한 예제 코드 3. 함수 객체의 장점? 일반 함수와 다르게 '상태'를 저장할 수 있다. 상태란? 과 같은 멤버 데이터 객체를 만들어주는 시점과 실행하는 시점을 분리할 수 있다. 예를 들어 100만 명의 플레이어가 게임에 접속하려 할 때 한 번에 접속을 시키는 것은 힘들다. 하지만 함수 객체를 활용하면 각 플레이어에게 '접속 요청'을 받아놓고, 여유가 되는대로 접속을 시켜주도록 만들어 줄 수 있다. 함수 포인터의 단점을 어느정도 극복할 수 있다. 함수 포인터는 시그니쳐가 동일해야만 사용할 수 있지만, 함수 객체는 를 오버로딩하여 쉽

2022년 3월 21일
·
0개의 댓글
·
post-thumbnail

Functor & Monad

함수형 프로그래밍을 공부하다보면 벽을 한번 마주한다. Functor와 Monad가 그것이다. 이걸 이해하기 위해서 위키피디아에서 집합론?, 범주론? 이런 걸 읽었던 적이 있는 것 같은데 여전히 잘 모르겠다. 이번에는 와닿는 방식으로 이해하는 것을 목표로 한다. Functor optional의 map 값이 있으면 실행, 없으면 말아 Collection의 map 값을 하나씩 가지고와서 매핑해라 Dictionary의 map 각 딕셔너리의 key, value를 tuple로 들고와서 매핑해라 function의 map Composition 해라 map을 이용한 transform을 지원하는, value를 가지는 context Context + value + transform(map) = Functor context 어떤 value가 처해있는 상태 Collection, Optional 등 다른 값을 가지는 Cont

2022년 2월 2일
·
0개의 댓글
·
post-thumbnail

High Order Function

자주 사용하는 고차함수들에 대해서 이해해보자.map, flatMap과 같은 경우는 여러가지가 존재하는데, 각각의 활용 방법에 대해서 알아보자. 각각의 고차함수의 Documnentation을 모두 달아두었으니, 한번씩 읽어보는 것을 잊지말자. Documentation 확인 Sequence forEach filter reduce -

2022년 2월 2일
·
0개의 댓글
·
post-thumbnail

당신은 이미 펑터Functor를 알고 있다

map 다시 보기 아마 JavaScript를 쓰면서 Array의 map 메소드를 사용해보지 않은 분은 거의 없을 겁니다. 그런데 혹시, map의 TypeScript 타입을 지금 바로 써내릴 수 있나요? 미리 외워두고 있지 않았더라도, 제네릭에 익숙하고 map 의 동작을 이해하신다면 금방 정답을 찾아낼 것입니다. 이걸 참고해서 이제 map을 구현해볼까요? 일단 첫번째 인자로 받은 xs: T[]가 있습니다. for문으로 순회하면 T 타입의 값을 얻을 수 있습니다. 이게 우리가 지금 T타입의 값을 얻을 수 있는 유일한 방법입니다. T 타입의 값을 확보하고 나니, 이걸 어디다 써야할지가 보입니다. 바로 두번째 인자 f입니다. i 값을 쓸 곳도 f 밖에 없고, f를 호출할 방법도 i를 인자로 사용하는 것 외에는 없지요. x의 타입이 바로 U입니다. 우리가 하려던게 뭐였지요? U[] 타입의 값을 구해

2021년 6월 8일
·
2개의 댓글
·
post-thumbnail

PBT로 FP 법칙 확인해보기 - Functor

Functor 우리는 함수형 프로그래밍 패러다임을 지원하는 많은 언어에서 다양한 자료 구조에 대해 map 함수를 지원하는 것을 알고 있다. 이러한 이른바 "map 함수를 구현하는 자료 구조"를 일반화한 특질을 Functor라고 부른다. Functor 만들기 functor는 어떤 형식(type)에 대한 것이 아니라 형식 생성자(type constructor)에 대한 것인데, 코틀린에서는 이 형식 생성자를 generic하게 표현하는 방법을 지원하지 않는다. 대표적인 함수형 언어인 스칼라에서는 상위 형식 생성자(higher kinded type)라고 불리는 개념을 기본 syntax로 제공하는데, 코틀린에서 이 higher kinded type을 표현하기 위해서는 코틀린 함수형 라이브러리인 arrow의 힘을 빌려야 한다. higher kinded type을 표현하기 위해 arrow에서 제공하는 Kind 형식을 사용해 Functor 인터페이스를 아래와 같이 작성할 수 있다.

2021년 2월 11일
·
0개의 댓글
·

Functor와 Monad

요즘 레츠스위프트를 구독하면서 여러가지 소식들을 접하고 있다. 여러 소식 중에 함수형 프로그래밍과 관련된 글을 그저께 읽다가 Functor와 Monad를 다시 접하게 되었다. 이 친구들은 기술 면접 준비하다가 몇번 스치다가 말았던 부분인데, 시간도 많으니! 이번 기회에 공부해보자라는 생각을 하게되었다. Swift와 관련된 글을 찾고 싶어 구글링을 하니 2가지 좋은 글을 찾을 수 있었다. Swift Monads, Functors and Applicatives with examples [Swift Functors, Ap

2021년 1월 29일
·
0개의 댓글
·

identity functor

프로그래밍 언어에 존재하는 모든 구체적인 타입은 암시적으로 identity functor로 lifting 되어 있는상태인가? (이게 맞는 표현인지는 모르겠다) η가 Identity functor인 I를 functor M으로 변환하는 natural transformation 이고 이에 해당하는 haskell의 return 함수가 이기 때문에 '그렇다'라고 대답 할 수 있다.

2020년 10월 26일
·
0개의 댓글
·

bifunctor & profunctor

bifunctor bifunctor는 타입인자가 두개인 타입생성자에 대해 각각 적용가능한 함수 두 개를 인자로 받아 lifting하는 bimap함수를 제공한다. 에 대한 fmap과 bimap은 각각 다음과 같다. right 타입뿐만 아니라 left 타입에 대해서도 사상이 필요하다면 bimap을 사용할 수 있다. 또한 과 동일하며 를 사용하면 첫번째 타입 인자에 대해서만 사상할 수 도 있다. bifunctor 역시도 functor이기때문에 지켜져야 할 laws가 있다. profunctor fmap(covariant functor), contramap(contravariant functor), bimap(bifunctor)에 대해서 이해했다면 dimap(profunctor)는 어렵지 않다. 첫번째 인자가 contravariant, 두번째 인자가 covariant인 bifunctor가 profunctor이다. (출처: [Understading productors]

2020년 8월 29일
·
0개의 댓글
·

contravariant functor

contravariant functors reverse the direction of composition. - Wikipedia covariant functor F(f∘g)=F(f)∘F(g) contravariant functor F(f∘g)=F(g)∘F(f) covariant map with ((->) r) (a -> b) -> (f a -> f b) (a -> b) -> ((->) r a) -> ((->) r b)) (a -> b) -> (r -> a) -> (r -> b) contravariant map with (\_ -> c) (b -> a) -> (f a -> f b) (b -> a) -> (a -> c) -> (b -> c) (a0 -> a1) 함수가 있을때 합성을 통해 함수의 출력을 변경하는 함수를 만들 수 있다. ((->) a0)를 functor로 본다면

2020년 8월 29일
·
0개의 댓글
·
post-thumbnail

[C/C++] 람다, 함수객체(Functor) 그리고 함수 포인터의 차이점

함수 포인터 함수 포인터는 함수를 주소값으로 받아 사용할 수 있는 포인터다. > 함수포인터를 통해 간편하게 함수를 특정 함수의 파라미터로 전달할 수 있다. 함수 객체 함수객체는 클래스에서 Operator() 연산자 오버로딩을 통해 구현하는 함수다. 다음과 같이 객체선언 후 객체 자체를 호출() 하면 함수객체가 호출된다. > 인수 개수에 따라 Generator(발생자), 단항함수, 이항함수 등으로 불린다. ![](https://images.velog.io/images/kjh3865/post/e8694931-718d-4cd8-bf4

2020년 8월 4일
·
0개의 댓글
·
post-thumbnail

FP in JS (자바스크립트로 접해보는 함수형 프로그래밍) - Either 함수자

자바스크립트로 하는 함수형 프로그래밍에 대해서 글을 써볼까 합니다. 우연한 기회로 함수형 프로그래밍에 대한 관심을 갖게 됐고, 프론트엔드 개발을 하면서 적용했던 함수형 프로그래밍에 대해서 다뤄볼 예정입니다. 지난 글에서 Maybe라는 함수자에 대해서 알아봤습니다. 오늘은 지난 글에 이어서 Either라는 함수자에 대해서 알아보겠습니다. Maybe를 쓸 때 약간의 부족한 부분이 있는데 이 부분을 채워줄 수 있는 함수자입니다. Maybe: 멋있지만 살짝 모자란 친구 이전 글에서 Maybe라는 멋진 함수자를 알아봤습니다. 함수 컴포지션에서 에러 처리시에 아주 우아하게 처리할 수 있게 도와주는 함수자였습니다. map 을 이용해서 함수 컴포지션을 할 때 Nothing이 되는 순간 그 뒤로 실행해야 할 map을 모두 무시할 수 있었기 때문이죠. 그리고 마지막엔 Maybe가 들고있는 값을 뽑아내거나 Nothing인 경우 기본값을 지정해줄수 있었습니다. Maybe의 한계

2019년 12월 1일
·
0개의 댓글
·
post-thumbnail

FP in JS (자바스크립트로 접해보는 함수형 프로그래밍) - 함수자(Functor), Maybe

자바스크립트로 하는 함수형 프로그래밍에 대해서 글을 써볼까 합니다. 우연한 기회로 함수형 프로그래밍에 대한 관심을 갖게 됐고, 프론트엔드 개발을 하면서 적용했던 함수형 프로그래밍에 대해서 다뤄볼 예정입니다. 시작 글: 코드 스타일 두 번째 글: 함수 컴포지션, 커링 세 번째 글: 함수형 프로그래밍의 특징 오늘은 함수자(Functor)에 대해서 알아보도록 하겠습니다. 함수형 프로그래밍에 생소하신 분들은 함수자라는 용어가 생소하실 수 있습니다. 함수면 함수지 자를 붙여서 함수자는 뭐

2019년 11월 25일
·
4개의 댓글
·