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# 코드를 작성할 수 있습니다.
'C#' 카테고리의 다른 글
1. yield return 에 대해 (개념) (0) | 2025.03.09 |
---|---|
Action 과 Func 의 형변환 살펴보기 (0) | 2025.03.08 |
제네릭 (Generic) <T> 에 대해서 (0) | 2025.03.05 |
C# 에서 ? (nullable) 의 의미와 활용 방법 (0) | 2025.03.05 |
배열은 참조 타입입니다 (0) | 2025.03.05 |