내일배움캠프/IL

[내배캠][Unity_6기][IL] C# 함수

binary는 호남선 2024. 8. 30. 23:05

- 다음 내용은 Unity 퀘스트 모음집 \ C# 사전 문법 기초 \ 함수 페이지들을 학습하고 작성되었습니다.

기본

- 함수 : 필요한 기능을 미리 정의해둔 코드의 모음

- 형태 :

반환 형식 함수 이름 (매개변수)
{
   함수 내용
}

- 반환 형식 : 함수 반환 값의 형식, 반환 값이 없으면 void

- 함수 이름 : 함수가 어떤 기능을 하는지 알 수 있도록 짓는 것을 권장

- 매개 변수 : 함수에 전달되는 값

 

/* 함수부 */
// 함수 정의
void PrintFunc()
{
    Console.WriteLine("Function String");
}

/* 로직부 */
Console.WriteLine("Hello World!");
Console.WriteLine("Program Running");
PrintFunc();	// 함수 호출
Hello World!
Program Running
Function String

- 위 출력에서 보듯 함수를 정의한다고 해서 실행되지는 않음

- 함수가 필요할 때 호출하여 사용

- 로직부와 함수부를 나누어 가독성 높이기

Return

- 함수의 실행을 멈추고 싶다면 return 키워드 사용

- (ex) 체력이 0일때까지 공격하는 로직

int hp = 3;
Attack();	// 함수 호출

void Attack()
{
    while (true)
    {
    	// hp가 1보다 작으면 함수 종료
        if (hp < 1)
        {
            return;
        }
        --hp;	// 증감식
        Console.WriteLine("damage : 1  hp : " + hp);
    }
}

return과 반환 형식

- 반환되는 데이터의 형식과 함수 헤더의 반환 형식이 동일해야 함

int num = GetNum(); 	// OK : 반환된 값(10)과 변수(int)의 데이터 형식 동일
string numStr = GetNum();   // ERR : 반환된 값(10)과 변수(string)의 데이터 형식 다름

int GetNum()
{
    return 10;
}

매개 변수

- 함수에 값을 넘겨주는 역할

- 함수 정의에 매개 변수가 없으면, 함수 호출 시 매개 변수 사용 불가

- 함수 정의에 매개 변수가 있으면, 함수 호출 시 인자 필요

- 매개 변수와 인자는 동일한 타입이어야 함

- 하나의 함수에 여러 개의 매개 변수 설정 가능

void DisplayInfo(string id, int level)
{
    Console.WriteLine("ID : " + id + " LV : " + level);
}
void PrintPray()
{
    Console.WriteLine("Always be ready to praise the GOAT");
}
/* 모범 예시 */
DisplayInfo("Hide on bush", 100);
DisplayInfo("Noob", 1);
PrintPray();

/* 잘못된 예시 */
// 매개 변수가 없는 함수에 인자를 넘김
PrintPray(1);
// 매개 변수와 인자의 타입 불일치
DisplayInfo(2, 1);
// 필요한 인자를 넘기지 않음
DisplayInfo(1);
DisplayInfo();
ID : Hide on bush LV : 100
ID : Noob LV : 1
Always be ready to praise the GOAT

네이밍 규칙 - 코딩 스탠다드

- 협업에서 다른 사람이 작성한 코드를 쉽게 이해할 수 있도록 정의해놓은 규칙

- 코딩 스탠다드를 준수하면 가독성이 높아지고 공동 코드 작업에서 통일성 유지

- 변수, 클래스, 함수이름에는 공백이 들어갈 수 없므로 대소문자 구분으로 가독성 향상

카멜 케이스

- 소문자로 시작하며 띄어쓰기 필요한 단어 첫 스펠링 대문자

- 주로 변수이름에 사용

파스칼 케이스

- 대문자로 시작하며 띄어쓰기 필요한 단어 첫 스펠링 대문자

- 주로 클래스나 함수 이름에 사용

void PrintName(string name)	// 파스칼 케이스(함수 이름)
{
    Console.WriteLine(name);
}

string myName = "홍길동";	// 카멜 케이스(변수 이름)
PrintName(myName);

참고 자료:

https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/coding-conventions

if 문과 return

- 모든 제어 경로에 반환 값이 정해져야 함

- 특정 조건에서 return한 경우 다른 조건에서 누락된 return이 없는지 확인

int score = 5;
int GetPoint()
{
    // 점수가 100 이상일 경우는 반환 값이 있지만
    if (score >= 100)
    {
        return 200;
    }
    // 이후에 return 없으면 ERROR!
    // CS0161 : 코드 경로 중 일부만 값 반환
    // 점수가 100 미만인 경우의 반환 값 없음, 기본적인 반환값 필요
    // 반환 형식에 맞추어 설정해주기
    return 0;
}