2022. 9. 20. 00:00ㆍCSharp/Functional Programming
이제 조금더 functional 한 개념에 대해 정의 해보겠다.
그전에 잠깐.... functional programming 을 해본적이 없는 사람들이 볼때
위에 내역들은 정말 생소해 보인다. 도대체 왜 이렇게 어려운 단어들을 사용하는 거야?
라고 할 수도 있다. 정말 그럴까? 아래를 한번 보자
Class, private, public, protected, Pure Virtual Function, Garbage Collector
SOLID pattern, Visitor, Decorator, Override, Overload, Extends, Implements,
MVVM, MVP, MVC, Dependency Injection, Inversion of Control, Inheritance, Polymophism
어떻게 보이는가? 당신이 객체 지향 개발자 이고 몇몇 design pattern 에 대해 알고 있으며
최소한 객체지향적인 개발을 하고 있다면 위에 단어들의 대부분을 이해할 것이다.
내가 무슨 말을 하려는지 알겠나?
그렇다. 나는 지금 용어 정의의 장점과 그것의 익숙함에 대해 이야기 하려는 것이다.
Design Pattern 에 대해 이야기 할때 최소한 각각의 pattern 의 세부적인 내용은 모르더라도
기본적인 정의는 알아야 서로가 대화가 가능하다.
MVVM 에 대해 이야기 할때 용어 없이 매번 Model View ViewModel 들의 상호 관계에 대해 이야기 하게되면
의미 전달이 정말 힘들고 어려워 질것이다.
Functional Programming 도 마찬가지이다. 기본적인 개념에 대해서 각각의 정의한 단어들이 있고
이 단어들을 통해 더 복합적인 개념이 정의가 된다.
그러다 보니 그러한 것들을 익힌적 없는 우리들은 아무래도 난해하고 어렵게만 느껴지는 것이다.
오늘 우리는 Magma 와 SemiGroup 이라는 것에 대해 알아 볼 것이다.
위에 그림을 보면 알겠지만 Magma 에 associativity 특성이 포함되면 SemiGroup 이 된다.
그렇다면 우선 Magma 에 대해 알아보자
사칙연산에 대해 예로 들어보자
각 사칙연산들은 다음과 같은 구조를 가지고 있다.
X OP Y = Z(number)
X: number
Y: number
OP : +, -, *, /
두 개의 숫자를 받아 숫자를 반화하는 함수이다.
예를 들면 다음과 같다.
3 + 2 = 5
즉 집합 S 가 있고 모두 T 유형(여기서는 숫자) 이라고 하자.
Magma: a ∈ S, b ∈ S --> a·b ∈ S
a 가 S 에 속하고 b 가 S 에 속하면 a op b 는 S 가된다면 그것을 우리는 Magma 라고 한다.
우리는 그렇게 하기로 약속했다.
int + int = int 라면 이것은 Magma 이다.
string + string = string 이라면 이것또한 Magma 이다.
이해가 되는가?
c# 으로 표현하자면 다음과 같다.
public int IntMagma(int x, int y) => x + y;
public string StringMagma(string x, string y) => x + y;
Console.WriteLine(IntMagma(2, 3));
Console.WriteLine(StringMagma("Hello", " world!!"));
int int => int
string string => string
으로 위에 두 함수는 magma 이다.
관련영상
'CSharp > Functional Programming' 카테고리의 다른 글
Monoid (0) | 2022.09.22 |
---|---|
Semigroup (2) | 2022.09.21 |
순수 함수 (Pure Function) (0) | 2022.09.19 |
Expression, Method chaining with Extension methods (0) | 2022.09.16 |
Functors (Map, Filter, Reduce) (0) | 2022.09.15 |