목록Categories (1104)
KoreanFoodie's Study

함수형 프로그래밍 패러다임에 대해 알아보며 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 특성 기반 테스트를 유닛 테스트와 함께 활용하면 테스트를 간략화하면서 견고한 테스트가 가능하다. 2. 모나드는 특정 인자를 타입으로 받아, unit/bind operator 를 통해 특정 중복을 제거하는 것에 유용하게 사용될 수 있다. 3. 이벤트 소싱을 활용하면, 데이터가 어떤 연유로 현재 상태에 이르게 되었는지 쉽게 파악이 가능하다. 특성 기반 테스트 소프트웨어 개발에서 유닛 테스트는 매우 중요하다. 결국 프로그램이라는 것이 특정 입력을 넣으면 특정 출력이 나오도록 하는 것이므로, 원하는 결과가 나오는지 배포 전에 항상 점검해야 한다. 기존에는 사실 특정 상황에 대..

함수형 프로그래밍 패러다임에 대해 알아보며 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 메모이제이션을 활용하면, 재귀적인 연산에서 이전 연산의 캐싱값을 이용해 불필요한 연산을 줄일 수 있다. 2. 꼬리 재귀 최적화는 컴파일러 최적화 플래그를 활성화하면 된다. 이를 통해 메모리 사용을 낮출 수 있다. 3. 순수 함수의 불변성을 이용해 병렬 연산을 쉽게 적용할 수 있다. 하지만 future 등을 사용하여 병렬 연산을 하는 것보다, sequential 한 방식의 성능이 더 나을 때도 있다. 퍼포먼스 최적화 사실 모든 경우와 상황에 알맞은 최적화 방법이란 없다. 어떤 경우는 메모리를 희생해서라도 속도를 높여야 할 수도 있고, 다른 경우는 메모리를 아끼기 위해 빠..

함수형 프로그래밍 패러다임에 대해 알아보며 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 함수형 연산자를 활용해 중복을 제거하고 DRY 원칙을 지킬 수 있다. 2. 파라미터 유사성이나 함수 중복 사용의 유사성은 파셜 애플리케이션 특수화나 함수형 합성으로 해결할 수 있다. 3. 고차원 함수를 통해 구조적 유사성과 숨은 루프를 제거할 수 있지만, 과도한 추상화는 다른 프로그래머들에게 진입장벽을 높일 수 있음에 유의하자. 함수형 연산자를 활용한 중복 제거 함수형 연산자를 적극 활용함으로써, 중복을 제거하고 DRY 원칙을 지킬 수 있다. DRY 원칙은 Don't Repeat Yourself 의 약자로, 코드가 지식을 보관하는 방식이라는 이해에 바탕을 둔다. 이상적..

함수형 프로그래밍 패러다임에 대해 알아보며 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 모든 프로그램은 순수 함수의 집합으로 표현될 수 있으며, 입력과 출력이 상호 작용하는 함수 집합으로 정의할 수 있다. 2. 입력과 출력 중심으로 사고하며, 중간 단계의 변환 과정을 차례대로 구현해 보자. 함수형으로 사고하기 모든 프로그램은 순수 함수의 집합으로 표현될 수 있으며, 입력과 출력이 상호 작용하는 함수 집합으로 정의할 수 있다. 함수를 설계할 때, 다음 스텝을 밟으면 함수를 간단하게 설계할 수 있다. 입력 데이터로부터 출발한다. 출력 데이터를 정의한다. 일련의 입력 데이터를 출력 데이터로 변환하는 각 단계인 변형 과정(순수 함수)를 정의한다. 사실 위 내용은..

함수형 프로그래밍 패러다임에 대해 알아보며 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 파셜 애플리케이션은 N 개의 인자를 가진 람다에서 하나의 인자를 바인딩해 N-1 개의 인자를 가지는 람다로 변환하는 연산을 의미한다. 2. 커링은 N 개의 인자를 가진 함수를 하나의 인자를 가진 함수 N 개로 분해하는 과정을 의미한다. 3. 파셜 애플리케이션과 커링을 이용하면 중복을 제거할 수 있고, 더 범용적인 코드를 생성할 수 있다. 우리는 이번 글에서 파셜 애플리케이션과 커링을 배우며, 이 두 가지가 어떻게 연관되었는지 알아볼 것이다. 파셜 애플리케이션 파셜 애플리케이션이란, N 개의 인자를 가지는 람다에서 하나의 인자를 바인딩해 N-1 개의 인자를 가지는 람다를..

함수형 프로그래밍 패러다임에 대해 알아보며 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 함수(람다)는 값이다. 고로 함수는 인자로 전달할 수 있고, 람다를 반환할 수 있으며 람다도 람다를 반환할 수 있다. 2. 순수 함수의 조합을 통한 설계는 불변성을 보장한다. 우리는 간단한 람다를 조합하여 고차원의 합성 함수를 만들어낼 수 있다. 3. 함수형 합성을 통해 중복을 효과적으로 제거할 수 있다. 또한 여러 인자를 가진 람다도 하나의 인자와 캡쳐된 값들을 가진 다수의 람다로 분해할 수 있다. 함수형 합성 우리는 고등학교 시간에 함수 합성에 대해 배웠다(혹은 중학교일수도 있다). 놀랍게도, 우리는 C++ 에서 동일한 작업을 할 수 있다. 😛 우리는 이제 람다를 ..

함수형 프로그래밍 패러다임에 대해 알아보며, 이를 C++ 를 이용한 소프트웨어 개발에 어떻게 적용하면 좋을지 알아보겠습니다. 핵심 : 1. 함수는 값이다. 함수는 인자로 전달할 수 있다. 간단한 함수를 조합해 더 크고 복잡한 함수를 만들 수 있다. 2. 순수 함수의 조합을 통한 설계는 불변성을 보장한다. 3. 람다를 순수 함수처럼 사용하자. 또한 캡쳐에 대해 명확히 알아두자. 사실 필자도 학부 과정 때 프로그래밍 언어 관련 수업을 들으며 함수형 언어를 접했지만, 그 당시에는 프로그래밍 자체에 대한 흥미가 그다지 없어서 그런지 큰 관심을 갖지 않았다. 열심히 하지도 않았고. 😅 그러다 보니 함수형 언어에 대한 지식은 머리 속 어느 구석에 앉아 먼지만을 수집하고 있었다. 그러다 다시 이 책을 읽으면서 함수형..
보호되어 있는 글입니다.

[C++ 게임 서버] 3-8. Select 모델 핵심 : 1. Select 모델을 사용하면 소켓의 유효성을 데이터를 주고 받기 전에 미리 체크할 수 있다. 2. 관찰하고자 하는 소켓을 fd_set 에 넣고, select 하면 관찰이 시작되며, 적어도 하나의 소켓이 준비되면 리턴된다(낙오자는 알아서 제거됨) 3. 세션을 이용해서 소켓을 관리할 수 있다. 세션은 두 기기간의 통신이 연결되었을 때 구축되고, 끊겼을 때 파괴되는 양방향 링크라고 생각하면 된다. 이번 시간에는 select 함수가 핵심이 되는 Selet 모델에 대해 알아보자. Select 모델을 사용하면 소켓 함수 호출이 성공할 시점을 미리 알 수 있다. 이것은 아래와 같은 상황에서 큰 이점으로 작용한다 : 블로킹 소켓 : 조건이 만족되지 않아서 ..

[C++ 게임 서버] 3-7. 논블로킹 소켓 핵심 : 1. 논블로킹 소켓은, 블로킹 소켓과 다르게 연결 및 송수신이 일시적으로 불가능한 경우, SpinLock 처럼 while 문을 돌며 다시 시도를 한다. 2. 논블로킹 소켓을 만드는 것은 간단하다. ioctlsocket 을 사용하면 된다. 3. 논블로킹 소켓 사용시, WSAEWOULDBLOCK 에러가 나올 경우, 다시 시도한다. 이는 송수신 버퍼의 상태가 비어 있거나 가득 차 있어 송수신이 불가능한 임시적인 상태이기 때문이다. 우리가 이전 글에서 활용했던 것은 소켓은 블로킹 소켓이다. 따로 옵션을 설정한 것 같지는 않은데? 그럼에도 불구하고, 우리가 만든 소켓이 기본적으로 블로킹 소켓으로 잡힌 것인데.. 논블로킹 소켓을 이야기하기 전에 먼저 블로킹 소켓..