[내일배움캠프 사전캠프] C# 사전문법 기초 - 함수

백성은·2025년 3월 26일

TIL

목록 보기
4/34

함수

함수는 특정 작업을 수행하는 코드 블록이다

Console.WriteLine();
Console.ReadLine();
Console.Clean();
Conver.ToInt32();

위와 같이 이미 정의된 함수들이 있으며, 필요할 때 호출해서 쉽게 사용할 수 있다

함수 만들기

정의된 함수가 없을 경우, 원하는 기능을 가진 함수를 직접 만들수도 있다

구성

	void 함수이름 ()
    {
    	실행할 내용
    }

함수 이름은 자유롭게 정할 수 있지만, 이름만 보고 어떤 기능을 수행하는지 유추할 수 있도록 의미있게 지어주는 것이 좋다

함수 사용하기

	함수이름();

예제

	Console.WriteLine("안녕하세요");
	Console.WriteLine("반갑습니다");
    
   	void MethodSample()
    {
    	Console.WriteLine("함수에 대해 알아보겠습니다");
    	Console.WriteLine("우선 영역에 대해 확인해보겠습니다");
    }
    
    Console.WriteLine("이해가 되셨으면 좋겠습니다.");
    
    MethodSample(); // 함수 실행

결과

    안녕하세요
    반갑습니다
    이해가 되셨으면 좋겠습니다
    함수에 대해 알아보겠습니다
    우선 영역에 대해 확인해보겠습니다

함수를 정의하는 코드는 중간에 작성했지만, 실제로는 호출한 시점에서 실행된다

가독성의 중요성

	Console.WriteLine("안녕하세요");
	Console.WriteLine("반갑습니다");
    Console.WriteLine("이해가 되셨으면 좋겠습니다.");
    
    MethodSample(); // 함수 실행
    
   	void MethodSample()
    {
    	Console.WriteLine("함수에 대해 알아보겠습니다");
    	Console.WriteLine("우선 영역에 대해 확인해보겠습니다");
    }

가독성이 좋지 않기에 보통 위의 예제처럼 로직 중간에 함수를 만들지는 않는다


return

함수 안에서 어떤 계산이나 작업을 한 후, 결과값을 함수 밖으로 전달해주는 역할을 한다

return의 역할

  • 함수의 실행을 종료한다
  • 값을 반환형에 맞게 돌려준다

return 사용 형태

	반환형 함수이름(매개변수)
	{
    	// 실행할 내용
        return 반환값;
    }

함수 실행 중지 예제 (return없이 작성)

함수의 로직이 더이상 실행되지 않았으면 하는 경우가 있을때, 예를 들어 체력 5가 있는데 공격할 때마다 1씩 깎이는 함수를 만든다고 가정

	int hp = 5;

	void Attack()
    {
		--hp;
        Console.Write("데미지 : 1 현재체력 :" + hp);
    }

위 코드는 Attack 이라는 함수를 실행할 때마다 체력을 깎고 출력해주는 기능

결과

	Attack();    // 데미지 : 1    현재체력 : 4
	Attack();    // 데미지 : 1    현재체력 : 3
	Attack();    // 데미지 : 1    현재체력 : 2
	Attack();    // 데미지 : 1    현재체력 : 1
	Attack();    // 데미지 : 1    현재체력 : 0
	Attack();    // 데미지 : 1    현재체력 : -1

이렇게 되면 체력이 0 아래로 계속 줄어들게 된다
현실적인 게임 로직에서는 체력이 0 이하로 내려가지 않도록 막아야 한다

return 활용 예제

	void Attack()
    {
    	if(hp < 1) // hp가 1보다 낮을때 아래 코드를 실행하지 않고 종료
        {
        	return;
        }
        --hp; // hp가 1 이상일 때만 감소
        Console.Write("데미지 : 1 현재체력 :" + hp);
    }
    

결과

	Attack();    // 데미지 : 1    현재체력 : 4
	Attack();    // 데미지 : 1    현재체력 : 3
	Attack();    // 데미지 : 1    현재체력 : 2
	Attack();    // 데미지 : 1    현재체력 : 1
	Attack();    // 데미지 : 1    현재체력 : 0
	Attack();    // 아무 출력 없음 (return으로 함수 종료)

return과 반환 형식

함수를 활용할 때 보면 변수에 값을 입력할때도 활용했던 상황들이 있다

	int num = Convert.ToInt32("10");
    string readTest = Console.ReadLine();

함수를 변수 저장

	int hp = 5;

	int testNum = Attack();
	string testString = Attack();

	void Attack()
	{
		if(hp < 1)
	    {
	     	return;
    	}

		hp--;
		Console.Write("데미지 : 1    현재체력 : " + hp);
	}

이런식으로 함수를 저장하면 에러가 발생하며, 함수의 결과를 변수에 저장하고 싶다면 return을 이용해야 한다

return을 이용해서 함수 저장

	void GetPoint()
    {
    	Console.WriteLine("보상으로 100 포인트 획득");
        return 100;
    }

위와 같이 작성하면 에러가 뜨는 것을 볼 수 있다
그 이유는 void는 함수의 결과를 사용하지 않겠다는 뜻이기 때문에 사용하고 싶다면 void 부분을 int로 바꿔줘야 한다

	int point = GetPoint(); // int point = 100;

	int GetPoint()
    {
    	Console.WriteLine("보상으로 100 포인트 획득");
    }

GetPoint()를 실행하면 return 뒤에 있는 숫자 100이 저장된다

주의사항

  • 함수의 반환 타입과 return 결과물의 타입이 같아야 한다
	int GetPoint() // 정수
    {
    	Console.WriteLine("보상으로 100 포인트 획득");
        return 100; // 정수
    }
  • 만약 void가 아니라 반환타입을 지정했다면 반드시 return으로 반환값을 줘야한다
	int GetPoint() // 정수
    {
    	Console.WriteLine("보상으로 100 포인트 획득");
        반환값이 없다 // 에러
    }
  • 타입에 맞는 데이터만 저장할 수 있다
	int GetPoint() // 정수
    string PointText = GetPoint(); // 문자열 변수와는 데이터 타입이 다르다
    
    {
    	Console.WriteLine("보상으로 100 포인트 획득");
        return 100; // 정수
    }

매개변수

Attack 함수를 보면 실행할 때마다 체력이 1씩 깎이고 있다

	void Attack()
    {
    	if(hp < 1)
        {
        	return;
        }
        
        --hp;
        Console.Write("데미지 : 1 현재체력 : " + hp);
    }

하지만 1이 아닌 다양한 데미지를 하고 싶을 때가 있다
그럴땐 함수의 괄호() 안에 변수를 넣어주고 사용하면 된다

	int hp = 5;
    
    Attack(3); // 데미지 : 3
    Attack(2); // 데미지 : 2
    
	void Attack(int damage)
    {
    	if(hp < 1)
        {
        	return;
        }
        
        hp -= damege;
        Console.Write("데미지 : " + damege +" 현재체력 : " + hp);
    }

이렇게 함수를 실행할 때마다 다르게 동작할 수 있는 변수를 매개변수라고 한다

여러 매개변수

매개변수는 한개만이 아닌 여러 매개변수를 만들 수 있다

	DisplayMyInfo(10, "chad", "전사");

	void DisplayMyInfo(int level, string name, string job)
    {
    	Console.WriteLine("레벨 : " + level + "이름 : " + name + "직업 : " + job);
    }

이때 매개변수 순서와 타입에 맞게 실행하여야 한다

주의사항

  • 함수를 만들때 매개변수를 설정하였다면 함수 실행시 반드시 값을 입력해야 한다

  • 매개변수를 설정하지 않았다면 함수 실행할때 값을 입력할 수 없다

	int hp = 5;
    
    Attack(3); // 에러
    
    void Attack() // 에러
    {
    	...
    }
	int hp = 5;
    
    Attack(); // 에러
    
    void Attack(int damage) // 에러
    {
    	...
    }
	int hp = 5;
    
    Attack("3"); // 에러
    
    void Attack(int damage) // 에러
    {
    	...
    }
profile
게임 개발일지

0개의 댓글