본문 바로가기
C#

=> 에 대한 진실과 오해 : 이것은 람다일까 아닐까?

by Oz Driver 2025. 6. 23.

C# 을 배우다 보면 자주 마주치는 기호 : =>

 

() => Console.WriteLine("Hello");


많은 사람들이 이것을 그냥 “람다(Lambda)”라고 부르곤 하지만, 사실 이 기호는 두 가지 전혀 다른 문법에서 사용됩니다. 즉, 모양은 같지만 의미와 쓰임새가 완전히 다른 두 가지가 존재하기 때문에, => 기호를 무조건 “람다”라고 부르는 것은 부정확한 표현입니다.

따라서 이 두 문법을 구분해서 이해한다면, 더 이상 => 때문에 헷갈릴 일은 없을 것입니다.

 

람다식 (Lambda Expression) : 익명 함수

람다식은 이름 없는 함수(익명 함수) 를 만들어서 delegate, Action, Func 등에 대입할 수 있도록 하는 문법입니다.

 

Action sayHello = () => Console.WriteLine("Hello!");
sayHello();   // 실행 결과 : 안녕하세요!
 

  sayHello 는 Action 대리자입니다.

  () => Console.WriteLine("Hello!")익명 함수 (람다식) 이며, 이것을 람다식이라고 부릅니다. 

  이 때 => 는 매개 변수와 실행 본문을 구분하는 역할을 하며, 람다 연산자라고도 부릅니다.

 

또 다른 예로 

 

Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(2, 3));  // 출력: 5

 

여기서 (a, b) => a + b 는 하나의 함수이며, 이것도 람다식입니다.

 

식 본문 멤버 (Expression-bodied member)

식 본문 멤버는 메서드나 속성 등을 한 줄로 간단하게 표현할 수 있도록 만든 C# 의 축약 문법입니다.

기존에는 중괄호 {} 와 return 을 써야 했지만, 이후 C# 문법 확장으로  => 를 사용하여 간결하게 표현할 수 있게 되었습니다.

이전까지 => 은 람다식에서만 사용되었기 때문에 헤깔릴 일이 없었으나, 이후에 나온 식 본문 멤버에 사용된 => 이 축약 기호 때문에 혼란스럽게 된 것이 아닐까 생각합니다.

 

식 본문 멤버는 다음과 같은 항목이 포함됩니다.

메서드

읽기 전용 속성 (get)

set 속성

생성자

소멸자 

 

이런 항목들을 통칭해서 식 본문 멤버 라고 부릅니다.

개별로 부를 때는 '식 본문 메서드', '식 본문 생성자' 처럼 앞에 '식 본문' 이라고 붙여주면 됩니다. 

public int Add(int a, int b) => a + b;            // 메서드
public string Name => "Oz";                       // get-only 속성
public string Name { set => name = value; }       // set 속성
public Person(string name) => Name = name;        // 생성자
~Person() => Console.WriteLine("소멸자 호출");     // 소멸자
 

위 코드들은 모두 이름이 명확한 멤버를 단순히 짧게 쓴 것이지, 익명 함수가 아닙니다.
따라서, 이 때 쓰인 => 는 축약 기호일 뿐이고, 람다 연산자와는 아무 관계가 없습니다.

다음은 식 본문 멤버 (Expression-bodied member) 들의 예시입니다.

1. 식 본문 메서드

public int Add(int a, int b)
{
    return a + b;
}

// => 를 이용해 축약하면,
public int Add(int a, int b) => a + b;

 

2. 식 본문 속성

public string Name
{
    get { return "Oz"; }
}

// => 를 이용해 축약하면,
public string Name => "Oz";

 

3. 식 본문 set 속성

public string Name
{
    set => name = value;
}

 

4. 식 본문 생성자

public Person(string name) => Name = name;

 

5. 식 본문 finalizer (소멸자)

~Person() => Console.WriteLine("소멸자 호출");

 

정리

다시 한번 강조하자면, => 는 단순한 기호입니다.

하지만 쓰이는 문맥에 따라 의미가 전혀 달라집니다. 

• 람다식에 쓰이면, 익명 함수를 정의하는 람다 연산자 가 되는 것이고, 

• 식 본문 멤버 (expression-bodied member) 에 쓰이면, 식 본문 축약 기호로 이해해야 합니다.