본문 바로가기
[ Program ]/c#스터디

55. Action/Func

by 관이119 2022. 2. 22.

Action 과 Func 를 알아보기전에 지난 부분 잠시 복습을 해보자.

 

그림1

 

그림1을 보면 바로 지난장에서 학습하던내용이다.

그런데 델리게이트를 꾸준히 선언해줘야 해서 상당히 불편하다.

delegate void tempdel(string str);
delegate string tempdel2(string str);

선언까지 없애고 그냥 사용하면 되지 않을까

그래서 MS 에서 미리 델리게이트를 선언해놨다.

 

그림2

그림2를 보자.

일단 Action 을 입력하면 두가지 사용가능한 형태가 보인다.

둘다 미리정의된 델리게이트이며 각각 설명이 나와있다.

일단 Action 은 void 반환에 파라미터가 없는 델리게이트 이다.

그리고 아래에 있는 제네릭 형태의 Action 은 파라미터를 받고 void 를 반환하는 형태다.

void를 반환한다는 의미는 반환값이 없다는 의미이다. 이부분은 당연히 알거라고 생각한다.

일단 예제를 하나 만들어보자.

 

그림3

 

그림3과 같이 파라미터에 반환값이 void 이고 파라미터가 없는 함수명을 넣으라고 나온다.

그러면 이제 계속 하던 내용인데 라는 생각이 들것이다.

 

그림4

그림4를 보면 3가지로 예제를 올려놨다.

앞장에서 하던 델리게이트,람다식 내용과 똑같다.

다만 델리게이트를 정의 하는 부분만 빠졌는데 Action 이 미리 정의된 델리게이트이기 때문에 정의하는 부분을 쓰지 않고도 위 예제처럼 사용할수 있다.

각부분의 설명은 바로앞장에서도 계속 하던내용이기때문에 생략하겠다.

 

그런데 파라미터로 넘겨야하는 값이 있는데 그건 어떻게 해야하냐 이런 생각이 들 수 있다.

그래서 그 델리게이트도 미리 정의 해놨다.

 

그림5

Action 의 제네릭을 입력하려고 하면 그림5와 같이 오버로딩된 목록들이 나온다.

Action 결국 파라미터를 0개~ 16개 까지 받을수 있게 되있다.

실제로 뭔가 다른걸 호출하면서 파라미터를 17개까지 넘겨본적은 없을것이다.

결국 혹시 오버되지않을까 걱정하지말고 그냥 쓰면 된다는말이다.

물론 파라미터가 17개 이상일경우는 델리게이트를 정의해서 사용하면 된다.

in T1 이 의미하는것은 짐작하거나 알것이다.

어렵게 생각하지말고 제네릭형태의 파라미터는 내가원하는 어떤한가지 형태의 파라미터를 넘길것이다 미리 지정하는 것이라고 생각하면 된다.

Action<string> 도 될수있고 Action<int> 도 될수 있다. Action<object> 역시 가능하다.

또는 Action<내가만든클래스> 도 가능하다.

결국 제네릭 파라미터는 무엇이든 넘길수 있지만 넘길형식이 어떤것인지 지정하는것 에 불과하다.

 

 

그림6

 

그림6을 보면 내가 string 형식으로 지정해줬기때문에 파라미터로 string 을 받는 void 형식의 함수를 파라미터로 요구하고 있다.

그럼 저기에는 바로 위 예제처럼 함수를 만들어 넣을수도 있고 무명메서드를 넣을수도있고 람다식으로 넣을수도있다.

물론 Action은 미리정의 되있기때문에 따로 델리게이트를 정의하지않고 바로 넣을수 있다.

참고로 나중에 다시 배우겠지만 Task 같은경우 파라미터로 아예 Action을 요구하는 경우도 있다.

 

그림7

그림7에 보면 해당 내용을 올려놨는데 Task 도 쓰레드와 같다고 생각하면 되고 결국 마지막엔 Task 로만 계속 사용하게 될것이다.

어쨋뜬 저런식으로 파라미터 자체가 아예 Action 이나 Func 을 요구하는 경우도 있어서 무조건 알아둬야 한다.

 

그림8

 

그림8에 마지막으로 ac4 부분을 보면 action 을 새객체로 생성하는 부분도 뺐다.

Action 을 정의하고 거기에 새로 생성된 무명메서드를 넣은것이니 문제될 부분은 없다.

 

일단 우리는 리턴값이 없는 미리정의된 델리게이트인 Action 에 대해 알아 봤다.

그럼 리턴값이 필요할땐 어떻게 해야할까

리턴값이 있는 델리게이트인 Func 도 미리정의되어 있다.

 

그림9

 

그림9를 보면 func 에 대한 예제를 올려놨다.

action 과 동일하지만 반환값이 있다는것만 다르다.

사용형식도 거의 동일하다.

Task 는 다음장에서 더 알아보자.

 

 

***숙제 : Action 과 Func 를 파라미터로 사용하는 함수가 어떤것들이 있는지 찾아보자.

 

 

 

'[ Program ] > c#스터디' 카테고리의 다른 글

57. async / await  (0) 2022.03.29
56. 쓰레드2(Task)  (0) 2022.02.27
54. 람다식  (0) 2022.02.17
53. 무명메서드  (0) 2022.02.08
52. 델리게이트  (0) 2022.02.05

댓글