C#에서 미리 준비해둔 기능 중에서 원하는 기능이 없을 수도 있습니다.
이럴때 저희는 직접 기능을 만들 수 있습니다.
함수를 만들때의 형식은 다음과 같습니다.
반환형식: 함수의 결과로 어떤 결과가 나타날지 알려주는 부분입니다.
일단 지금은 void 그대로 사용하겠습니다.
함수이름: 변수 이름과 마찬가지로 내가 마음대로 지을 수 있는 나만의 함수 이름입니다.
자유롭게 정할 수 있지만 함수이름을 의미 있게 부여하는 것이 좋습니다.
중괄호 ( ): 무엇인가 기능을 실행할때 붙이는 기호입니다. 대부분의 경우 함수에서 많이 사용됩니다.
미리 정해진 문법이 아닌 이상 중활호가 있는 대부분은 함수라고 생각하시면 됩니다.
함수의 영역 { }: 어디까지 이 함수의 영역인지 표시하는 역할을 합니다.
어떤 기능이 미리 준비되어야 하는지 이 영역에 코드를 만들게 됩니다.
함수에 포함되는 부분은 실행되지 않습니다. 이 부분은 항상 실행되는 것이 아니라 원할때 실행되도록 할 수 있습니다.
함수 사용하기: 함수를 사용하기 위해서는 원하는 함수 이름뒤에 중괄호 ( ) 를 쓰면 됩니다.
함수이름();
가독성이 좋지 않기 때문에 보통 로직 중간에 함수를 만들지는 않습니다.
함수 - return
특정한 상황에서 함수의 로직이 더이상 실행되지 않았으면 하는 경우가 있습니다.
return은 해당 코드 밑에 있는 모든 기능을 캔슬하고 함수를 종료합니다.
따라서 return이 제일 위에 있을 경우 아무런 기능도, 동작도 하지 않습니다.
조건을 설정해서 return을 작성하면 원할때만 작동하도록 코드를 만들 수 있습니다.
함수 - return 과 반환 형식
만약 함수의 결과를 변수에 저장하고 싶다면 return을 이용해야 합니다.
실행하면 보상을 주는 함수를 만들어봅시다.
void GetPoint()
{
Console.WriteLine("보상으로 100 포인트를 획득합니다.);
}
앞서 반환형식에 void를 사용했었는데, void 는 함수의 결과를 사용하지 않겠다는 뜻입니다.
따라서 함수의 결과를 사용할려면 다른 자료형으로 바꿔주어야 합니다.
숫자를 사용하고 있으니 int로 설정하겠습니다.
int GetPoint()
{
Console.WriteLine("보상으로 100 포인트를 획득합니다.);
}
변수에 저장할 수 있게 하려면 return이 필요합니다. 또한 return 뒤에 결과로 사용하고 싶은 값을 입력합니다.
100을 입력해보겠습니다.
int Point = GetPoint();
int GetPoint()
{
Console.WriteLine("보상으로 100 포인트를 획득합니다.);
return 100;
}
GetPoint를 실행하면 return 뒤에 있는 숫자 100이 Point에 저장됩니다.
- 함수의 반환 타입과 return 결과물의 타입이 같아야 합니다. (저희는 100이라는 정수와 int를 사용했습니다.)
- 만약 void가 아니라 반환타입을 지정했다면 반드시 return으로 반환값을 줘야 합니다.
- 타입에 맞는 데이터만 저장할 수 있습니다. (위에서는 Point와 GetPoint의 데이터 타입이 같습니다.)\
함수 - 매개변수
체력이 1씩 깎이는 Attack함수를 만들어 봅시다.
void Attack()
{
if(hp < 1)
{
return;
}
--hp;
Console.Write("데미지 : 1 현재체력 : " + hp);
}
이 상황에서 1이 아닌 데미지를 주고 싶을때, Attack뒤의 소괄호에 damage변수를 하나 만들어보겠습니다.
void Attack(int damage)
{
if(hp < 1)
{
return;
}
--hp;
Console.Write("데미지 : 1 현재체력 : " + hp);
}
데미지를 1로 고정시키지 않고 damage 변수에 의해 동작하도록 수정합니다.
void Attack(int damage)
{
if(hp < 1)
{
return;
}
hp -= damage;// <- 데미지 적용 (damage를 뺀 값을 hp에 할당)
Console.Write("데미지 : " + damage + " 현재체력 : " + hp);
}
함수를 실행할때는 damage에 적용하고 싶은 값을 입력하면서 호출합니다.
int hp = 5;
Attack(3); //데미지를 3 현재체력 2
//ㄴ>주고싶은 데미지
void Attack(int damage) //->3이란 값이 damage에 저장
{
if(hp < 1)
{
return;
}
hp -= damage; // 5-=3
Console.Write("데미지 : " + damage + " 현재체력 : " + hp);
}
매개변수는 한개만이 아닌 여러 매개변수를 만들 수 있습니다. 이때 매개변수의 순서와 타입에 맞게 실행하여야 합니다.
DisplayMyInfo(1o, "chad", "전사");
//10->level, chad->name, 전사->job
void DisplayMyInfo(int level, string name, string job)
{
Console.WriteLine("레벨 : " + level + "이름 : " + name + "직업 : " + job);
}
- 함수를 만들때 매개변수를 설정하였다면 함수 실행시 반드시 값을 입력하여야 합니다.
- 매개변수를 설정하지 않았다면 함수 실행할때 값을 입력 할 수 없습니다.
- 매개변수와 입력하는 값의 타입이 같아야 합니다.