함수(Function) 개념 정리

DevBison·2025년 8월 13일

1. 함수란?

  • 정의: 특정 작업을 수행하는 코드 묶음
  • 목적
    • 코드 재사용
    • 가독성 향상
    • 유지보수 편의성
  • 형식
    반환형 함수이름(매개변수 목록) {
        // 실행 코드
        return 반환값;
    }

2. 함수의 기본 구성 요소

  1. 반환형(Return Type)

    • 함수가 돌려줄 값의 자료형
    • 없으면 void 사용
  2. 함수 이름

    • 기능을 나타내는 의미 있는 이름
  3. 매개변수(Parameter)

    • 함수를 호출할 때 전달받는 값
    • 여러 개 가능, 없을 수도 있음
  4. 함수 본문

    • 실제 실행되는 코드
  5. 반환값(Return Value)

    • return 키워드로 반환

3. 함수 종류

(1) 일반 함수

  • 가장 기본적인 형태
  • 호출 시마다 실행
int Add(int a, int b) {
    return a + b;
}

(2) 멤버 함수

  • 클래스 내부에 정의되어 해당 클래스 객체가 호출
  • 멤버변수 접근 가능
class Player {
public:
    int Health;
    void Damage(int amount) {
        Health -= amount;
    }
};

(3) 정적 함수 (static)

  • 객체 생성 없이 클래스 이름으로 호출
  • 정적 멤버변수만 접근 가능
class Math {
public:
    static int Multiply(int a, int b) {
        return a * b;
    }
};

(4) 가상 함수 (virtual)

  • 부모 클래스에서 선언 후, 자식 클래스에서 재정의(오버라이드) 가능
  • 런타임 다형성 구현
class Animal {
public:
    virtual void Speak() { std::cout << "Animal sound\n"; }
};

class Dog : public Animal {
public:
    void Speak() override { std::cout << "Bark\n"; }
};

(5) 순수가상함수 (Pure Virtual)

  • 구현 없이 선언만 하고, 자식 클래스에서 반드시 구현해야 함
  • 추상 클래스 형태로 사용
class Shape {
public:
    virtual void Draw() = 0; // 순수가상함수
};

(6) 인라인 함수 (inline)

  • 호출 시 함수 내용이 코드에 직접 삽입
  • 호출 오버헤드 감소, 하지만 너무 크면 코드 부풀어짐
inline int Square(int x) { return x * x; }

4. 함수의 매개변수 전달 방식

방식설명예시
값 전달 (Value)매개변수에 값 복사, 원본 영향 없음void Func(int a)
참조 전달 (Reference)원본 변수에 직접 접근void Func(int& a)
포인터 전달 (Pointer)메모리 주소 전달, NULL 체크 필요void Func(int* a)
const 참조원본 접근하되 수정 불가void Func(const int& a)

5. 함수 오버로딩 (Overloading)

  • 같은 이름의 함수 여러 개를 정의하되 매개변수 타입/개수가 다르면 구분 가능
void Print(int x) { std::cout << x; }
void Print(std::string s) { std::cout << s; }

6. 함수와 스코프

  • 지역 함수(로컬 함수): C++ 기본 문법에는 없음 (C++20부터 람다 활용)
  • 전역 함수: 모든 코드에서 호출 가능
  • 클래스 멤버 함수: 해당 클래스 객체/정적 문맥에서만 사용 가능

7. 함수 비교 표

구분선언 위치호출 방식멤버변수 접근특징
전역 함수클래스 밖이름만 호출불가능어디서든 호출 가능
멤버 함수클래스 안객체를 통해 호출가능객체 상태를 바꿀 수 있음
정적 함수클래스 안클래스 이름으로 호출불가능객체 없이 호출 가능
가상 함수클래스 안포인터/참조 통해 호출가능런타임 다형성 구현

8. 언리얼 엔진에서 함수 예시

UCLASS()
class AMyActor : public AActor {
    GENERATED_BODY()

public:
    // 블루프린트에서도 호출 가능
    UFUNCTION(BlueprintCallable)
    void JumpAction();

    // 오버라이드 예시
    virtual void BeginPlay() override;
};
profile
응애 개발자

0개의 댓글