[UE5] Pure(순수함수) Impure(비순수함수)

SunowMin·2024년 6월 13일
0

Unreal

목록 보기
14/21

순수함수를 만들었는데 정확히 언제 실행되는지 궁금해서 작성하는 글


순수함수(Pure Functions) VS 비순수함수(Impure Fuctions)

가장 큰 차이점은 함수의 동작으로 클래스의 멤버나 상태를 변경하는지 유무

순수함수 (Pure Functions)

특징

  • 동일한 입력에 대해 항상 동일한 출력을 반환하고, 외부 상태를 변경하지 않으며, 부작용이 없음
  • 실행핀 없음
  • 일반적으로 값을 구해오거나 데이터 값을 출력하기만 하는 작업에 사용

참조 투명성 (Referential Transparency)
: 함수가 함수 외부의 영향을 받지 않는 것으로, 동일한 입력에 대해 항상 동일한 출력을 반환
부작용 없음 (No Side Effect)
: 함수 내부에서 외부 상태를 변경하지 않음
상태 독립성 (State Independence)
: 외부 상태나 전역 변수를 참조하지 않음


실행

  • 데이터 핀으로 연결되며, 그에 관련된 데이터가 필요할 때 컴파일러가 자동으로 실행함

    즉, 순수 함수는 연결된 노드마다 한 번씩 호출됨


구현

코드

함수 선언에서 BlueprintPure 키워드 지정

블루프린트

Pure 박스 체크 활성화




비순수함수(Impure Fuctions)

특징

  • 클래스의 멤버나 상태를 자유롭게 변경할 수 있음

부작용 존재 (Side Effects)
: 외부 상태를 변경하거나, 전역 변수를 참조 및 수정
상태 의존성 (State Dependency)
: 함수의 동작이 외부 상태나 전역 변수에 의해 영향을 받음


실행

  • EventGraph에서 실행 핀을 Function Call 노드에 연결하여 명시적으로 실행해야 함

    즉, 비순수 함수는 실행핀에 의해 호출됨


구현

코드

함수 선언에서 BlueprintCallable 키워드 지정

블루프린트

Pure 박스 체크 비활성화




예제

순수함수

int Add(int a, int b) {
	return a+b;   
}

입력이 같으면 항상 같은 결과를 반환하는 함수를 순수함수로 만들어줌

순수함수 호출

❓ 궁금했던 건 Save Data in Struct 함수가 언제 불리느냐임

순수함수는 연결된 노드마다 한 번씩 호출되므로

1️⃣ Client Message, Client IP, Client ID 데이터가 Set될 때 :
데이터가 설정(Set)될 때마다 이 데이터를 입력으로 받아 즉시 실행

2️⃣ Call On Data Received에서 사용될 때:
해당 함수의 입력으로 Client Data Struct가 필요하므로, Save Data in Struct 함수가 실행되어 Client Data Struct를 생성하고 반환



비순수함수

int Add(int a, int b) {
	globalCounter++;
    return a+b;   
}






언리얼 공식 문서
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/UserGuide/Functions/

profile
게임, AR, VR 개발자

0개의 댓글