안녕하세요!
오늘도 게임개발자가 되기위해 공부하고 있는 구구입니다.
오늘부터는 C#의 함수에 대해 알아보도록 하겠습니다.
- 메소드
static void Print() // 접근지정자 반환 데이터 형식 메소드명(매개변수, ·····)
{
Console.Write("Hello World");
}
- 특정 코드를 모아둔 코드블록( { ~ } )
- 특정 기능을 분리해서 처리
- 반환 데이터는 함수를 통해 나온 값의 데이터 형을 뜻함(void는 아무것도 반환하지 않는다는 뜻)
- 매개변수를 쓰지 않으면 그냥 '()' 처리
※static은 나중에 설명.
함수의 형태에 들어가기 앞서서 몇가지를 정의하고 넘어가겠습니다.
리턴형(x) -> void
리턴형 데이터(o) -> int, float와 같이 반환값이 있음
파라미터(x) -> 매개변수 x
파라미터(o) -> 매개변수 o
함수를 설정해 놓고 쓰다가 까먹을시
F12, alt+F12
를 누르시면 함수로 이동하거나 함수를 보여주는 단축키 입니다.
- 함수의 형태 1
-> 리턴형(x), 파라미터(x)
InitTitle()의 경우 매개변수도 없고 void인 함수입니다.
함수 자체는 단순히 "짝수 & 홀수 보여주기( 0 ~ 100)"를 출력하는 함수입니다.
PrintEven()은 수를 2로 나눳을 때 나머지가 0인, 즉 짝수를 골라내서 출력하고
5개 쓸때마다 엔터로 줄바꿈을 하기 위한 코드까지 추가한 함수입니다.
PrintOdd()는 수를 2로 나눳을 때 나머지가 1인, 즉 홀수를 골라내서 출력하고
5개 쓸때마다 엔터로 줄바꿈을 하기 위한 코드까지 추가한 함수입니다.
- 함수의 형태 2
-> 리턴형 데이터(o), 파라미터(x)
Add()와 InputNum()은 둘다 int형을 반환하는 함수입니다.
여기서 중요한 점은 InputNum()이 출력부분에
Console.WriteLine("입력하신 정수는 {0}", InputNum());
와 같이 함수가 있다면 출력을 먼저 하는게 아니라
InputNum()이라는 함수를 실행해서 반환값을 먼저 받고(여기서는 int형의 num을 반환받아야함)
그다음 "입력하신 정수는 {0}"을 출력합니다.
- 함수의 형태 3
-> 리턴형 데이터(o), 파라미터(o)
Square이라는 함수는 int형을 반환하고 매개변수 i를 받는 함수입니다.
i는 매개변수 이므로 함수에 들어가기 전에 입력되어야 하는 값입니다.
- 함수의 형태 4
-> 리턴형(x), 파라미터(o)
이번에는 예전에 언급한 참조형과 값형식을 통한 예제로 확인해보겠습니다.
- Call by Value
- 값에 의한 호출
- 함수에서 값에 영향을 주지 않음
- 일반 함수
- void swap(int a, int b)
- Call by Reference
- 주소에 의한 호출
- 함수에서 값에 영향을 줌
- ref키워드를 가지는 함수
- void swap (ref int a, ref int b)
첫번째 ValueSwap의 경우 함수안에서 a와 b가 바뀌게 되었지만
함수가 끝나고 나서까지 영향을 주지 못해서 num1 과 num2는 다시 원래의 숫자로 돌아갑니다.
즉, a와 b와 temp는 함수를 빠져나간 순간 사라지고 num1과 num2 값 자체는 변화가 없었기 때문에 바뀌지 않고 출력됩니다.
하지만 두번째 RefSwap의 경우 num1과 num2에 100과 -100이 생긴것은 동일하지만 매개변수를 받을때 참조형으로 받았기 때문에 a와 b는 num1과 num2의 값인 100과 -100을 받는것이 아니라 num1과 num2의 주소값을 각각 받게됩니다.
그리고 나서 temp를 이용한 swap을 하게되면 a와 b는 주소값이기 때문에 temp의 값이 a와 b를 바꾸는게 아니라 a와 b가 가리키는 값들을 바꾸게 됩니다.(즉, num1 과 num2 자체에 직접적인 영향을 줌)
아래의 그림을 보시면 더 이해가 잘 될껍니다.
결과를 보면 알 수 있듯이 call by value에 의한 swap은 num1과 num2가 바뀌지 않았지만
call by reference에 의한 swap은 num1과 num2가 바뀐것을 확인할 수 있습니다.
오늘은 여기까지 하도록 하겠습니다.
'게임 개발 공부 > C#' 카테고리의 다른 글
C# 함수& 배열 문제 풀이 2 (0) | 2021.12.07 |
---|---|
C# 함수& 배열 문제 풀이 1 (0) | 2021.12.06 |
C# 배열 2 (0) | 2021.12.04 |
C# 배열 1 (0) | 2021.12.03 |
C# 함수 2 (0) | 2021.12.02 |
댓글