본문 바로가기
2023_10_12~30 (c#기초)

10.19 (c# 기초)

by 오랑이귀엽다 2023. 10. 19.

@@@@10.19@@@@

 

 

(함수 -- 기본)

 

함수 만들기!!!

변수를 만들 때는 다음과 같이 만들었다.

int name;


string name = Console.ReadLine();

 

함수를 만들 때는 아래와 같은 형식을 가진다.

void Hello()

{

 

}

변환 형식

함수의 결과로 어떤 결과가 나타날지 알려주는 부분

자세한 내용은 뒤에 나올 return과 변환 형식 참고

지금은 void 그대로 사용

 

함수 이름

변수 이름과 마찬가지로 내가 마음대로 지을 수 있는 나만의 함수 이름

asdjsa, sss, xxx, ttt 등 자유롭게 정할 수 있지만 함수이름을 의미 있게 부여하는 것이 좋다.

예를 들어 Console 함수들 ReadLine(), WriteLine(), Clean() 등 이름을 보는 것 만으로 어떤 기능을 가지고 있는지 대략적으로 유추 할 수 있다.

 

중괄호 {}

무엇인가 기능을 실행할때 붙이는 기호

대부분의 경우 함수에서 많이 사용

if 나 for, switch 등 미리 정해진 문법이 아닌 이상 중활호가 있는 대부분은 함수라고 생각

 

함수의 영역 {}

if, for, switch 등에서 사용된 것과 마찬가지로 어디까지 이 함수의 영역인지 표시하는 역할

 

ex)

 

Console.WriteLine("안녕하세요");
Console.WriteLine("반갑습니다.");

void MethodSample()
{
Console.WriteLine("함수에 대해 알아보겠습니다.");
Console.WriteLine("우선은 영역에 대해 확인해보겠습니다.");
}

Console.WriteLine("이해가 되셨으면 좋겠습니다.");

 

이 중 중괄호로 감싸인 부분이 함수의 영역에 해당

함수에 대해 알아보겠다고 출력하는 기능을 만들어 보았다.

위와 같이 함수에 포함되는 부분은 실행되지 않는 걸 볼 수 있다.

이 부분은 항상 실행되는 것이 아니라 우리가 원할 때 실행되도록 할 수 있다.

 

 

함수 사용하기!!!

함수를 사용하기 위해서는 원하는 함수 이름뒤에 중괄호 ( ) 를 쓰면된다.

함수이름();

모든 문장은 나왔으나 함수 부분이 중앙이 아닌 마지막에 표출됨

대신 MethodSample(); 을 맨 마지막에 작성했더니 가장 마지막에 출력 되는 것을 볼 수 있다.

 

함수를 실행하게 되면 그 시점에서 함수에 미리 만들어둔 기능을 끌어가 사용하게 된다.

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

 

(함수 -- return)

특정한 상황에서 함수의 로직이 더이상 실행되지 않았으면 하는 경우가 있다.

ex)

 

체력이 5가 있는데 공격할때마다 1씩 깍이는 기능을 가정

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

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

 

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

이렇게 공격할때마다 계속 체력이 감소한다면 체력이 0 일때 공격하더라고 체력은 - 로 계속 감소될 것

 

이럴때 return 을 활용 ( 함수에 맨위에 추가)

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

 

실행하면 이번에는 아무런 실행이 되지 않는 것을 볼 수 있다.

return 은 해당 코드 밑에 있는 모든 기능을 캔슬하고 함수를 종료

return이 맨 위에 있기 때문에 실행해도 아무런 기능도 동작하지 않았던 것

 

조건에 의해서만 return 이 동작하도록 만듬

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

조건을 설정해서 return 을 작성하면 원할때만 작동하도록 코드를 만들 수 있다.

 

 

(함수 -- return과 반환 형식)

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

앞서 만든 함수에 변수를 저장하면 어떻게 될까?

int hp = 5;

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

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

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

 

하지만 에러가 발생

 

만약 함수의 결과를 변수에 저장하고 싶다면 return 을 이용

실행하면 보상을 주는 함수를 만들어 보자.

위 코드는 콘솔에 결과를 보여주는 기능만 가지고 있다.

변수에 저장 할 수 있게 하려면 return 이 필요

return 뒤에 결과로 사용하고 싶은 값을 입력

여기까지 하면 return 부분에 빨간색으로 에러가 뜨는 것을 볼 수 있다.

함수를 만들때 void 함수() 를 만들었는데 여기서 void함수의 결과를 사용하지 않겠다는 뜻

만약 사용하고 싶다면 void 부분을 원하는 자료형으로 바꿔주면 됨

숫자를 사용하고 있으니 int 로 설정

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

1번과 2번은 같은 뜻이 됨

 

주의사항!!!

 

1. 함수의 반환 타return 결과물의 타입이 같아야 한다.

 

2. 만약 void 가 아니라 반환타입을 지정했다면 반드시 return 으로 반환값을 줘야한다.

 

3. 타입에 맞는 데이터만 저장할 수 있다.

 

 

(함수 -- 매개변수)

 

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

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

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

 

 

1이 아닌 다양한 데미지를 주고 싶다면

 

함수의 소괄호 ( ) 는 특수한 공간

소괄호 안에 변수를 하나 추가 (변수를 만들기만 하고 초기화는 하지 않는다.)

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; <- 데미지 적용
Console.Write("데미지 : " + damage + "    현재체력 : " + hp);
}

 

함수를 실행할때 있는 소괄호 ( ) 에 방금만든 변수에 적용하고 싶은 값을 입력하면서 호출

 

실행할때마다 다른값을 입력할 수 있으며 그에따라 매번 다르게 동작

이렇게 중괄호에서 만들어져 실행할때마다 다르게 동작할수 있는 변수를 매개변수 라고한다.

 

 

(함수 -- 여러 매개변수)

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

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

 

이때 매개변수 순서와 타입에 맞게 실행

 

 

주의사항!!!!

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

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

매개변수와 입력하는 값의 타입이 같아야 한다.

 

 

'2023_10_12~30 (c#기초)' 카테고리의 다른 글

10.18 (c# 기초)  (0) 2023.10.18
10.16 (c#기초)  (0) 2023.10.16
10.13 (c#기초)  (0) 2023.10.13
10.12(c#기초)  (0) 2023.10.12