@@@@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 level, string name, string 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 |