[C#] 람다식(3)

Learning 

When: 1학년 7월 17일

 

How:

람다식이 내용은 많지만 원리나 사용 이유 같은 기본적인 것만 이해하면 나머지는 어렵지 않게 이해할 수 있었기 때문에 내용이 좀 많아 3개로 나눠서 올리게 되었습니다.

 

Understanding:

  • 람다식의 한계 :
    람다식은 정말 편리한 문법입니다. 코드의 양을 정말 획기적으로 줄여주기 때문이죠. 하지만 얻는 것이 있으면 있으면 잃는 법도 있는 법, 메서드는 할 수 있지만 람다식은 할 수 없는 것도 있습니다.
    • ref, out, in 키워드 일반 메서드에서는 ref와 out 키워드, in 키워드를 사용하여 참조 형식으로 값을 받을 수 있는데, 람다식은 ref와 out, in 키워드로 선언된 매개변수를 받는 대리자에는 사용할 수 없습니다.
    • params 키워드 일반 메서드의 인수로는 params 키워드를 사용하여 가변 길이의 인수를 받을 수 있지만 람다식에서는 인수에 params 키워드로 수식된 변수를 받을 수 없습니다.
    • 재귀 호출 재귀 호출은 메서드 내에서 자기 자신을 다시 호출하여 계속 호출시키는 문법인데, 람다식은 이름이 없으니 호출을 하려면 자신을 담은 대리자를 호출해야 합니다. 하지만 그것은 자기 자신을 호출시키는 것이 아니라 대리자에 소속된 모든 메서드를 전부 호출시키는 것이기 때문에 재귀 호출이라고 보기 어렵습니다. 대리자에 람다식을 하나만 넣으면 가능하겠지만, C#이 그런 기능을 구현하는 것을 권장했다면, '한 개의 람다식만 넣을 수 있는 대리자 변수'에 대한 키워드를 추가했을 것이기 때문에 보통 람다식은 재귀 호출을 수행하는데 적합하지 않다고 볼 수 있습니다.
    • 오버로드 오버로드를 사용할 만큼 복잡한 코드는 람다식으로 구현하지 않겠지만, 람다식은 이름이 없습니다. 그것은 때문에 하나의 람다식을 여러 버전으로 나누는 것도 불가능 하다는 뜻이 됩니다.
    • yield return 람다식 안에서는 yield return을 사용하여 지연 실행을 만들 수 없습니다. 불가능한 것 같지는 않지만, 사용하려고 하면 컴파일러에서 "yield 문은 무명 메서드 또는 람다 식 안에 사용할 수 없습니다." 라는 에러 메세지가 출력되며 컴파일 오류가 납니다.
  • 람다식을 메서드의 인수로 넣을 수 있는 이유 :
    람다식을 메서드의 인수로 넣는 코드는 List의 Find(), Sort() 메서드 등에 사용되는데, 그것이 가능한 이유는 그 메서드의 인수의 타입이 대리자이기 때문입니다. 인수에 int형 변수를 넣는 함수에서 int a = 10; 이렇게 선언된 a를 넣을 수도 있지만, 그냥 10을 넣을 수도 있는 것과 같습니다.
  • 람다식의 사용처 :
    마지막으로 람다식의 사용처 입니다. 람다식은 간단한 메서드인 만큼 많은 곳에서 사용되는 편입니다. 아래의 코드에 제가 생각했을 때 대표적인 람다식 4개와 간단한 설명을 포함한 코드 입니다.
List<int> ints = new List<int>();
ints.Find(x => 5 > x); // 5보다 작은 값을 찾기 (조건)

List<string> strings = new List<string>();
strings.Sort((a, b) => a.CompareTo(b)); // 알파벳 순서대로 오름차순 정렬하기 (정렬)
                                        // (a랑 b랑 비교해서 b가 더 크면 1을 출력, 1이 출력되면 순서가 바뀜
Button button = myButton;
button.onClick.AddListener(() => Debug.Log("누름")); 유니티에서 이벤트에 간단한 로직을 추가할 때 사용

Action action = () => Console.WriteLine("action 호출됨"); // 지금까지 많이 설명했지만
                                                         // 델리게이트에 메서드 제작 없이 즉석으로 사용

 

Result: 지금까지 람다식에 대해 제가 헷갈렸던 부분들을 노트에 적고, 그것들을 전부 설명하는 과정을 통해 글을 3개나 쓰게 되었습니다. 그만큼 람다식이 한번 알면 부가적인 요소는 배우기 쉽다는 뜻이니 람다식을 최대한 빨리 배우셔서 효율적인 코드를 작성하시길 바랍니다.

'C#' 카테고리의 다른 글

[C#] params 키워드  (0) 2025.07.19
[C#] in 키워드  (0) 2025.07.18
[C#] 람다식(2)  (1) 2025.07.16
[C#] 람다식(1)  (2) 2025.07.15
[C#] Action, Func  (0) 2025.07.14