매개변수가 있는 함수

C#에서 매개변수를 사용하여 함수에 값을 전달하는 방법을 학습합니다. 코드 재사용성을 위한 매개변수의 장점을 이해합니다.

매개변수(variable)(parameter)란?

함수(function)에 값을 전달해서 사용하는 방법입니다. 같은 함수(function)를 다양한 값으로 재사용할 수 있게 해줍니다. 게임에서 데미지 계산, 체력 회복, 아이템 사용 등에 활용됩니다.

public class Player : MonoBehaviour
{
    public int currentHp = 100;
    
    // 데미지를 받는 함수 (매개변수로 데미지 값 전달)
    void TakeDamage(int damage)  // damage를 받아서 사용
    {
        currentHp = currentHp - damage;
        Debug.Log("데미지 " + damage + "를 받았습니다!");
        
        if (currentHp <= 0)
        {
            Debug.Log("사망했습니다!");
        }
    }
    
    // 체력을 회복하는 함수
    void Heal(int healAmount)  // healAmount를 받아서 사용
    {
        currentHp = currentHp + healAmount;
        if (currentHp > 100)
        {
            currentHp = 100;  // 최대 체력 제한
        }
        Debug.Log("체력 " + healAmount + " 회복!");
    }
}

함수(function) 호출 시 값 전달

void Update()
{
    // 적에게 공격당했을 때
    if (Input.GetKeyDown(KeyCode.X))
    {
        TakeDamage(20);  // 20 데미지를 전달
    }
    
    // 물약을 마셨을 때
    if (Input.GetKeyDown(KeyCode.H))
    {
        Heal(30);  // 30 체력을 전달
    }
}
  • 동작 과정
    1. TakeDamage(20) 호출
    2. 함수(function) 안에서 damage 매개변수(variable)(parameter)가 20이 됨
    3. currentHp = currentHp - 20 계산
    4. 결과에 따라 메시지 출력

매개변수(variable)(parameter)의 장점

매개변수(variable)(parameter) 없이 (비효율적):

// 각 데미지마다 함수를 만들어야 함
void TakeDamage10() { currentHp -= 10; }
void TakeDamage20() { currentHp -= 20; }
void TakeDamage30() { currentHp -= 30; }
void TakeDamage50() { currentHp -= 50; }
// ... 계속 만들어야 함 (비효율적!)

매개변수(variable)(parameter) 사용 (효율적):

// 하나의 함수로 모든 데미지 처리 가능!
void TakeDamage(int damage) 
{ 
    currentHp -= damage;
    Debug.Log("데미지 " + damage + " 받음!");
}

// 어떤 데미지든 사용 가능!
TakeDamage(10);   // 10 데미지
TakeDamage(25);   // 25 데미지
TakeDamage(100);  // 100 데미지

게임 개발에서의 실제 활용:

public class CombatSystem : MonoBehaviour
{
    // 다양한 적에게 데미지를 줄 수 있음
    void AttackEnemy(GameObject enemy, int damage)
    {
        Enemy enemyScript = enemy.GetComponent<Enemy>();
        enemyScript.TakeDamage(damage);
    }
    
    void Start()
    {
        GameObject enemy1 = GameObject.Find("Enemy1");
        GameObject enemy2 = GameObject.Find("Enemy2");
        
        AttackEnemy(enemy1, 20);  // 첫 번째 적에게 20 데미지
        AttackEnemy(enemy2, 35);   // 두 번째 적에게 35 데미지
    }
}

← 목차로 돌아가기