icon안동민 개발노트

함수 정의 및 기본 호출 방법


 함수는 블루프린트에서 재사용 가능한 코드 블록을 만드는 데 사용됩니다.

 이를 통해 복잡한 로직을 모듈화하고, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

함수 생성 방법

  1. 'My Blueprint' 패널에서 '함수 추가' 버튼 클릭
  2. 함수 이름 지정 (예 : "CalculateDamage")
  3. 새로 생성된 함수 그래프로 이동

함수 입력과 출력 설정

  1. 함수 그래프의 왼쪽에 있는 입력 핀에서 '+'를 클릭하여 입력 매개변수 추가
  2. 오른쪽의 출력 핀에서 '+'를 클릭하여 반환 값 설정
입력 예:
- BaseDamage (Float)
- CriticalHitChance (Float)
 
출력 예:
- FinalDamage (Float)

함수 본문 작성

 함수 그래프 내에서 노드를 추가하여 원하는 로직을 구현합니다.

예: 데미지 계산 함수
 
[입력: BaseDamage] --> [Random Float in Range] --> [Branch]
[입력: CriticalHitChance] ----^                     |
                                                    v
                                 [Multiply] <-- [True: 2.0]
                                    |
                                    v
                               [출력: FinalDamage]

함수 호출 방법

  1. 그래프에서 우클릭하여 컨텍스트 메뉴 열기
  2. 함수 이름 검색 및 선택
  3. 함수 노드의 입력 핀에 필요한 값 연결
  4. 함수 노드의 출력 핀을 다른 노드에 연결하여 결과 사용

순수 함수 vs 불순 함수

 1. 순수 함수 (Pure Function)

  • 동일한 입력에 대해 항상 동일한 출력 반환
  • 외부 상태를 변경하지 않음
  • 블루프린트에서 파란색 노드로 표시
  • 실행 핀이 없음

 2. 불순 함수 (Impure Function)

  • 외부 상태를 변경할 수 있음
  • 실행 순서가 중요함
  • 블루프린트에서 회색 노드로 표시
  • 실행 핀이 있음

로컬 변수 사용

 함수 내에서만 사용되는 임시 변수를 생성할 수 있습니다.

  1. 함수 그래프에서 우클릭하여 '변수 추가' 선택
  2. 변수 이름과 유형 설정
  3. 해당 함수 내에서만 사용 가능

함수 오버로딩

 동일한 이름의 함수를 다른 매개변수로 여러 개 정의할 수 있습니다.

함수 1: CalculateDamage(BaseDamage: Float) -> Float
함수 2: CalculateDamage(BaseDamage: Float, CriticalHitChance: Float) -> Float

 블루프린트는 호출 시 제공된 인자에 따라 적절한 함수를 선택합니다.

함수 구성 및 재사용 팁

 1. 단일 책임 원칙 준수

  • 각 함수는 하나의 명확한 작업만 수행하도록 설계

 2. 의미 있는 이름 사용

  • 함수의 목적을 명확히 나타내는 이름 선택
  • 예 : CalculateDamage, UpdatePlayerHealth

 3. 함수 크기 제한

  • 너무 큰 함수는 작은 단위로 분할
  • 일반적으로 화면 한 번에 볼 수 있는 크기로 유지

 4. 입력 유효성 검사

  • 함수 시작 부분에서 입력값의 유효성 검사
[함수 시작] --> [입력값 체크] --> [Branch]
                                 |
                  [에러 처리] <-- [False]
                                 |
                  [메인 로직] <-- [True]

 5. 주석 추가

  • 복잡한 로직에 대한 설명을 주석으로 추가
  • 'Description' 필드에 함수의 목적과 사용법 설명

 6. 재사용성 고려

  • 여러 곳에서 사용될 수 있는 일반적인 기능은 별도의 함수로 분리

 7. 디버그 지원

  • 중요한 지점에 Print String 노드 추가
  • 개발 빌드에서만 작동하는 디버그 로직 포함

고급 함수 기능

 1. 이벤트 디스패처와 함수 연동

  • 함수 실행 결과에 따라 이벤트 발생
[함수 실행] --> [결과 확인] --> [이벤트 디스패처 호출]

 2. 인터페이스 함수 구현

  • 블루프린트 인터페이스를 통해 정의된 함수 구현
  • 다형성 활용 가능

 3. 재귀 함수

  • 함수가 자기 자신을 호출
  • 주의 : 무한 루프 방지를 위한 종료 조건 필수
예: 팩토리얼 계산
[Factorial 함수] --> [Branch: N <= 1?]
                        |
   [Return 1] <-- [True]
                        |
[N * Factorial(N-1)] <-- [False]

 4. 콜라이더 오버랩 이벤트와 함수 연결

  • 충돌 감지 시 특정 함수 호출
[OnComponentBeginOverlap] --> [CheckCollision 함수 호출]

함수 최적화 팁

 1. 과도한 함수 호출 피하기

  • 루프 내에서 불필요한 함수 호출 제거

 2. 무거운 연산은 한 번만 수행

  • 결과를 캐시하여 재사용

 3. 불필요한 형변환 피하기

  • 가능한 동일한 데이터 타입 사용

 4. 조건부 실행 활용

  • Branch 노드를 사용하여 필요한 경우에만 특정 로직 실행

 함수는 블루프린트 프로그래밍의 핵심 요소로, 잘 설계된 함수는 코드의 가독성, 재사용성, 그리고 유지보수성을 크게 향상시킵니다.

 위의 가이드라인을 따라 함수를 생성하고 사용함으로써, 더 효율적이고 구조화된 블루프린트를 작성할 수 있습니다.

 지속적인 연습과 실제 프로젝트에의 적용을 통해 함수 사용 능력을 향상시키는 것이 중요합니다.