Life Archive
article thumbnail
Published 2023. 9. 25. 12:50
[CS] Pure Function 게임 개발 학습/CS

UE5를 학습하던 도중 캡슐화를 하면서 Pure 체크박스에 체크를 하여 순수함수로 만들어줬었는데,

확실하게 순수함수에 대해 짚고 넘어가고자 학습하게 되었다.


순수 함수를 검색하면 아래와 같이 나온다.

- 같은 입력를 넣으면, 항상 같은 출력이 나오는 함수

- 사이드이펙트(부작용)이 없는 함수

 

본격적으로 학습하기 전에, 함수에 대한 기본개념을 다시 숙지하자면,

함수는 아래와 같은 목적으로 사용된다.

- Mapping : 주어진 입력을 원하는 출력으로 매핑해주는 기능

- Procedures : 함수는 순차적으로 처리하도록 실행될 때가 있는데, 이를 절차형 프로그래밍 (PP) 라고 부른다. 

- I/O : 다른 시스템과 소통하기 위해 존재하는 함수도 있다.

 

만약에 여러 개의 함수가 하나의 데이터를 동시에 수정하고,

그 데이터를 사용하는 함수가 있다면 해당 함수는 항상 같은 입력에 대하여 일정한 출력을 내기가 힘들 것이다.

특히 게임 개발 언어는 멀티스레드 언어이므로 이런 일이 발생하기 쉽다.

 

예를 들어, 몬스터를 잡을 때 경험치를 얻는 과정을 생각해보자.

몬스터를 한 마리 잡으면 기본적으로 플레이어는 20의 경험치를 받도록 설계한다.

경험치 클래스에서 경험치라는 데이터 하나로 모든 것을 해결한다면,

매우 복잡하고 치명적인 오류가 발생하기 쉬울 것이다.

 

경험치 2배 이벤트를 한다던가, 특정 아이템을 장착하면 1.2배의 경험치를 제공한다던가를

모두 하나의 데이터를 수정하면서 플레이어에게 경험치를 주는 방식으로 프로그래밍을 하면 난리가 나게 된다.

 

분명 입력은 몬스터 한 마리를 넣었는데 나오는 경험치는 매번 다르게 되는 것이다.

이런 함수는 순수 함수가 아니게 된다.

 

캡슐화된 데이터를 사용하여 데이터 자체를 변하지 않고 객체마다 단계별로 거치며

수정하여 결론적으로 안전하게 플레이어에게 원하는 경험치를 전달하도록 설계해야 할 것이다.

 

OOP를 사용하면서 각 객체들이 정확한 역할을 수행하고 안전하게 데이터를 처리하기 위해서 순수함수를 적극적으로 사용하여야 하며,

이는 특정 함수가 다른 함수에게 예상치 못하는 영향을 미치는 경우를 미리 예방하게 할 것이다.

 

출처 : https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976

 

Master the JavaScript Interview: What is a Pure Function?

Pure functions are essential for a variety of purposes, including functional programming, reliable concurrency, and React+Redux apps. But…

medium.com

https://velog.io/@nittre/JavaScriptFunction-Composition-Series-1.-Pure-Function

 

[JavaScript] Pure Function(순수 함수)

function composition을 이해하기 위한 사전 지식 - 순수함수

velog.io