C# 함수 2
본문 바로가기
  • 게임 개발자가 되고싶은 구구
게임 개발 공부/C#

C# 함수 2

by gugu99 2021. 12. 2.
반응형

안녕하세요!

오늘도 게임개발자가 되기위해 공부하고 있는 구구입니다.

오늘도 C#의 함수에 대해 알아보도록 하겠습니다.

 

 


  • out

- ref 키워드 처럼 레퍼런스(ref처럼 파라미터에 사용됨)

- 전달하는 변수 초기화 없이 사용 가능

- static void InitNum(out int addNum)

 

C#-ref-out-초기화-파라미터

저번시간에 배웠던 ref를 이용한 함수 1개와 out을 이용한 함수 1개를 만들었습니다.

둘다 똑같이 값을 100 대입한다는 함수인데 a의 경우는 출력이 잘 되고 b의 경우는 출력이 안됩니다.

그 이유는 int a, b를 둘다 선언은 했지만 초기화는 하지 않았기 때문에

ref는 초기화 없이는 사용할 수 없으므로 오류가 나고

out은 초기화 없이 사용가능하기 때문에 오류가 나지 않습니다.

out도 ref처럼 주소값을 사용하기 때문에 대입하고 함수가 종료되어도 그 값이 남습니다.

 

 

C#-ref-out-초기화-파라미터

 

 

실제로 오류가 나는데 오류가 나는 이유를 보면 b가 할당되지 않았다고(즉, 초기화가 없다) 나타내고 있습니다.

그래서 b=0으로 초기화를 시켜주고 돌려보면 아무 문제없이 돌아갑니다.

 

 

 

C#-ref-out-초기화-파라미터

 

※ 기존의 값을 바꿔야 할 필요가 있다면 refout을 써야 바뀜

 


  • 디폴트 매개 변수(default parameter)

- 초기화 파라미터

- 반드시 파라미터 뒤에서부터 순차적으로 초기화

 

 

C#-디폴트매개변수-초기화파라미터-뒤-순차적-초기화-default-parameter

 

 

디폴트 파라미터를 사용했다는 것을 알 수 있듯이 디폴트 파라미터는 가장 끝 파라미터 부터 값을 지정해 줘야합니다.

그리고 중간중간 띄우고 값을 지정해줘서는 안됩니다.

그 부분을 인지하고 d부터 시작해서 c까지만 지정해 준 것을 알 수 있습니다.

그래서 함수를 호출할 때 4개의 값을 전부다 불러도 되고 a와 b만 값을 지정하지 않았으므로 값을 2개만 넣어도 함수가 동작합니다.( c와 d의 값이 바뀌는 경우 4개 다 채워서 넣어주면 되고 미리 설정한 값 그대로 간다면 2개만 넣어도 됨)

 

 

C#-디폴트매개변수-초기화파라미터-뒤-순차적-초기화-default-parameter


  • 메소드 오버로딩

- 메소드 이름이 중복

- 파라미터의 형식이 다름

- 파라미터의 수가 다름

 

ex)

static int Add(int a, int b)

static int Add(int a, int b, int c)

static int Add(float a, float b)

-> 위 3개는 서로다른 함수로 인식

 

C#-메소드오버로딩-메소드-오버로딩-메소드이름중복-중복-파라미터의형식-파라미터의수-파라미터

 

 

위 처럼 반환값이 다르거나, 파라미터의 수가 다르거나, 파라미터의 자료형이 다른 경우 서로 다른 함수로 인식합니다.

이때 static int Add(int a, int b, int c, int d = 0) 의 경우 디폴트 파라미터 때문에 

static int Add(int a, int b, int c)와 모호성으로 오류가 발생할 수 있습니다.

그래서 디폴트 파라미터를 사용할 경우에는 이러한 모호성에 주의할 필요가 있습니다.

 

 

C#-메소드오버로딩-메소드-오버로딩-메소드이름중복-중복-파라미터의형식-파라미터의수-파라미터


  • params

- 파라미터의 제한 없이 처리

- int Total(params int[] values)

- int를 배열첨자로 하므로서 파라미터를 원없이 쓸 수 있게 만듬)

 

 

아래의 함수호출부분을 보면 파라미터를 다양하게 부르고 있습니다.

써야할 파라미터가 몇개일지 모를 때 이와같이 params를 사용합니다.

 

CheckValues 함수의 경우 자료형이 object이기 때문에 boxing이 엄청 일어나기 때문에 메모리 효율 측면에서는

권장드리지는 않지만 이렇게 써야되는 경우도 있으니 한번 체크하고 넘어가는것도 좋을꺼 같습니다.

또한 params 자체도 boxing이 많이 일어나기 때문에 적절히 사용할 필요가 있습니다.

 

 

 

 

 

 

 

오늘은 여기까지 하도록 하겠

습니다.

반응형

'게임 개발 공부 > 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# 함수 1  (0) 2021.12.01

댓글