VB.NET 함수의 람다 표현법. 함수를 더 간단하게 표현해보자.

2024. 2. 7. 10:41VB.NET/왕초보

VB.NET에서 일반적으로 함수를 표현하는 방법은 아래와 같다.

Private Function FuncExam(param1 As Integer) As String
   ...
End Function

 

Private/Public Function 으로 시작해서 End Function으로 끝나는 아주 일반적인 구문이며 모든 함수는 이 규칙에 따라서 사용해야 한다.

아래 간단히 예를 하나 들어보자. 아래 Integer형의 파라미터를 받아서 "파라미터는 ...입니다."를 반환하는 간략한 함수를 살펴보자.

Private Function FuncExam(param1 As Integer) As String
   Return "파라미터는 " & param1.ToString & " 입니다."
End Function

 

당연히 Private Function 으로 시작해서 End Function으로 끝나는 VB.NET의 문법을 충실히 따르고 있다. 여기서 잠깐 옆으로 새서 지난 시간에 알아봤던 문자열 관련 함수를 사용해보자. 아래와 같이 표현할 수 있다.

Private Function FuncExam(param1 As Integer) As String
   Return String.Format("파라미터는 {0} 입니다.", param1)
End Function

 

여기서도 함수 선언의 기본은 충실히 지키면서 String.Format 함수를 사용해서 문자열을 합치도록 만들어봤다. 여기서 한번 더 나아가서 지난번에 배웠던 보간된 문자열 형식으로 만들어보자.

Private Function FuncExam(param1 As Integer) As String
   Return $"파라미터는 {param1} 입니다."
End Function

 

이제 이런 부분은 이해가 바로바로 될 것이다. 자... 이제 이 예제중 마지막 함수를 람다 표현법으로 수정해보자. 전형적인 함수 사용규칙을 따르지 않으니 유심히 살펴보도록 하자.

Private FuncExam As Func(Of Integer, String) = Function(param1) $"파라미터는 {param1} 입니다."

 

헐~ 정말 희한하다. Private Function으로 시작해서 End Function으로 끝나지 않았는데도 함수를 선언하고 사용이 가능하다. 정말 이상하게 생겼는데 정상 동작을 한다. 이제 이 소스를 분석해보자.

 

이 구문은 FuncExam이라는 이름으로 함수를 선언하는 구문이다. As Func 구문으로 인해 Func형으로 선언한다는 의미가 된다. 뒤이어 나오는 데이터형은 순서대로 적어주면 된다. 여기서 필요한 데이터형은 param1과 FuncExam의 두가지가 필요하니 순서대로 Integer와 String을 적어준 것이다. 만약 파라미터가 2개라면 첫번째 파라미터의 형, 두번째 파라미터의 형, 함수의 반환형의 3개를 적어주면 된다. 파라미터가 몇개든 맨 마지막의 형식이 정의한 함수의 반환형이 된다.

 

뒤이어 나온 Function이라는 키워드로 인해 파라미터를 정의하게 되며, 별도의 Return문 없이 반환 값을 뒤이어 적어주면 함수 선언이 완성되게 된다.

 

람다 형식은 자체의 특수성으로 인해 복잡한 함수는 표현할 수가 없다. 그래서, 복잡한 형식의 함수를 람다 형식으로 표현하려면 여러개의 함수로 나눠서 하나하나의 람다 형식으로 표현하게 되는데 오히려 소스가 더 복잡해지는 단점이 있기 때문에 일반적으로 람다 형식은 한두줄의 간단한 함수를 더 간단하게 표현하는 용도로 사용하게 된다.

반응형