본문 바로가기
C#

=> (람다 연산자) 이해하기

by Oz Driver 2025. 3. 8.

 

 

C++을 사용하던 개발자라면 C#의 => 연산자를 처음 접했을 때 낯설고 혼란스러울 수 있습니다.
하지만 C#에서는 이 연산자가 매우 다양한 곳에서 사용되며, 코드의 가독성과 간결함을 높이는 데 중요한 역할을 합니다.
이 글에서는 => 연산자가 사용되는 대표적인 형태와 그 의미를 쉽게 설명합니다.

 

 

다양한 위치에서 사용되는 => 연산자

=> 연산자는 람다 표현식이나 대리자 선언 등에서 자주 사용됩니다.

Func<int, int> square = x => x * x;
Action greet = () => Console.WriteLine("Hello!");


첫 번째 줄은 x라는 입력값을 받아 x * x를 반환하는 람다 함수입니다.
두 번째 줄은 인자 없이 "Hello!"를 출력하는 동작을 정의한 Action입니다.

 

 

기존 코드와의 비교

=> 연산자는 메서드 정의에서도 사용할 수 있습니다.
아래 예제는 같은 기능을 일반 방식과 => 방식으로 비교한 것입니다.

// 일반적인 메서드 정의
class MathUtil
{
    public int Square(int x)
    {
        return x * x;
    }
}

// => 연산자를 사용한 축약 표현
class MathUtil
{
    public int Square(int x) => x * x;
}


단순한 로직일 경우 =>를 사용하면 한 줄로 표현할 수 있어 코드가 더 간결해집니다.

 

 

=> 연산자의 의미

=> 연산자는 내부적으로 return 키워드와 중괄호 {}가 생략된 표현이라고 볼 수 있습니다.
즉, 다음과 같은 코드에서:

public int Add(int x, int y)
{
    return x + y;
}


다음과 같이 축약할 수 있습니다.

public int Add(int x, int y) => x + y;


이처럼 간단한 반환값을 가지는 메서드는 =>를 통해 더 짧게 표현할 수 있습니다.

 

 

속성 접근자에서의 활용

속성의 get 과 set 접근자에도 `=>` 연산자를 사용할 수 있습니다. 간단한 로직을 가진 경우, 코드가 훨씬 간결해지고 가독성도 좋아집니다.

public override string Text
{
    get => base.Text;
    set => base.Text = value;
}


이 코드는 다음과 같은 의미를 가집니다


* get 접근자는 base.Text를 반환합니다.
* set 접근자는 전달된 값을 base.Text에 대입합니다.
중괄호 없이 한 줄로 표현할 수 있어 가독성이 좋아지고, 불필요한 코드가 줄어듭니다.

 

또한 아래와 같은 코드에서 get 이 생략된 것처럼 보일 수 있습니다.

public string Name => _name;

 

하지만 이 코드는 실제로는 "읽기 전용 속성을 표현식 바디로 정의" 한 것입니다. 내부적으로는 다음과 같이 해석됩니다

public string Name
{
    get { return _name; }
}

 

즉, get 이라는 키워드는 생략된 것이 아니라, 컴파일러가 자동으로 처리해주는 것입니다.

여기서 한 가지 주의할 점이 있습니다.

// 오류 발생
public string Name => _name;
set => _name = value;

 

이 코드는 문법 오류가 발생합니다. 왜냐하면 public string Name => _name; 이 구문은 속성 전체를 표현식 바디로 작성한 것이고, 이 시점에서 C#은 "이건 get-only 속성이구나" 라고 인식해버립니다. 따라서 그 뒤에 set => 를 붙이는 건 허용되지 않습니다.
set 을 표현식 바디로 사용하고 싶다면 아래와 같이 get 과 set 을 모두 블록 { } 안에서 정의해야 합니다:

public string Name
{
    get => _name;
    set => _name = value;
}

 

이 방식은 C# 7.0부터 지원되며, get과 set 각각을 표현식 바디로 작성할 수 있습니다.

 

 

마무리

* => 는 return 과 중괄호를 축약한 표현식 바디 문법입니다.
* 람다 함수, 메서드, 속성 등 다양한 곳에서 사용됩니다.
* get 만 있는 속성은 전체를 표현식 바디로 축약 가능합니다.
* set 은 표현식 바디로 작성할 수 있지만 반드시 블록 { } 안에서 정의해야 합니다.
* 속성 전체를 표현식 바디로 정의한 후 `set`을 따로 붙이는 문법은 허용되지 않습니다.

처음엔 낯설게 느껴질 수 있지만, 구조를 이해하고 익숙해지면 더 명확하고 효율적인 C# 코드를 작성할 수 있습니다.