github 주소
25/02/27
오늘 배운 것
1. 함수
2. 구조체
3. 슈팅게임
4. 열거형
5. 람다식
git주소
슈팅게임
version 1.0
Console창에서 입력받고 움직이는것만 구현 해둠
KEY WORD 정리
## 1. out 키워드
out이 붙은 인자는 return처럼 값을 넘겨받을 수 있고 reference로 동작하기 때문에 효율적임
## 2. ref
reference(참조), 값을 복사하는게 아닌 인자로 넘겨 받은 변수의 메모리 공간을 가리켜서 별도의 복사가 없기때문에 오버헤드가 적음, 함수 내부에서 ref 키워드가 붙은 인자를 변경하면 함수 외부에서 인자로 넘긴 값도 바뀜
## 3.params
배열같은 타입을 인자로 넘겨야하는 경우 배열을 선언하고 그 배열을 넘겨줘야함
예시)func(arr),func({1,2,3,4})
params키워드를 사용하면 메소드(함수)호출 시 인자들을 가변배열로 묶어줘서 별도의 선언없이 호출가능
예시)func(1,2,3,4)
### 재귀함수(recursive function)
사실 예제에 나온 Factorial같은 경우는 재귀 함수로도 구현이 가능하지만, 배열 선언해줘서 반복문으로도 가능합니다
재귀함수를 사용할땐 예제처럼 중단해야하는 case를 정말 잘써야합니다 안그러면 print()함수처럼 무한 루프로 stack overflow가 발생해요 :slight_smile:
왜 stack overflow가 발생하는지 궁금하신분들은 어제 배웠떤 메모리구조(힙,데이터(정적), 스택,코드) 참고, 하시고 "함수 호출"은 stack으로 동작하기 때문에 Print()같은 재귀함수가 stack overflow를 일으킨겁니다!
그래서 앞에서 말씀드린거처럼 함수 호출이 stack으로 동작하다보니까 효율성(오버헤드 증가)이나 메모리측면에서 안좋은 경우도 있어요 그래서 반복문 등으로 구현할 수 있으면 반복문으로 구현하는게 좋아요
======================================================
함수 오버로딩
**반환 타입이 다르거나**
**매개변수의 타입이 다르거나,**
**매개변수의 개수가 다르거나 **
이 조건을 만족하면 **함수 중복(Overloading)**이 가능합니다
컴파일 될 때 자동으로 호출될거에요
======================================================
======================================================
/// 세개쓰면 자동으로
/// <summary>
///
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
이런식으로 자동으로 만들어지는데
/// <summary>
/// 두 수를 곱하는 함수, param1, param2를 곱한 수를 return한다
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns> (int) param * param2</returns>"예시로 이렇게 작성하고 함수에 마우스 커서를 가져다 대면 저희가 적은 함수의 설명이 나와요
======================================================