C#에는 잘 알려지지 않았지만 실무에서 매우 유용하게 활용할 수 있는 기능들이 여럿 있습니다. 이번 글에서는 개발자들이 놓치기 쉬운 대표적인 숨겨진 기능 네 가지를 살펴보겠습니다.
1. 람다 식(Lambda Expressions)
람다 식은 C#에서 간결한 익명 함수를 표현하는 방법입니다. 식 컨텍스트에서 => 토큰을 사용하며, 이 연산자는 'goes to(→)' 연산자라고 불립니다. 람다 식을 선언할 때 사용되며, 입력 매개변수와 실행 본문을 한 줄로 정의할 수 있어 코드를 훨씬 간결하게 만들어 줍니다.
Func<int, int> square = x => x * x;
위 예제처럼 람다 식은 LINQ 쿼리나 이벤트 처리기 작성 시 특히 강력한 효과를 발휘합니다.
2. Nullable 형식
C#은 값 형식에도 null을 할당할 수 있도록 특별한 데이터 형식인 nullable 형식을 제공합니다. 일반적인 값 범위뿐 아니라 null 값까지 저장할 수 있어, 데이터베이스와 연동하거나 값이 없는 상태를 명확히 표현해야 할 때 유용합니다.
<data_type>? <variable_name> = null;
예를 들어 int? count = null;처럼 선언하면 정수형 변수에 null을 안전하게 할당할 수 있습니다.
3. Null 병합 연산자(Null Coalescing Operator)
Null 병합 연산자(??)는 nullable 값 형식 및 참조 형식과 함께 사용됩니다. 왼쪽 피연산자가 null이 아닐 경우 그 값을 그대로 반환하고, null일 경우 오른쪽 피연산자의 값을 반환합니다. 암시적 변환이 가능한 경우, 한 피연산자를 다른 nullable(또는 non-nullable) 값 형식으로 변환하는 데 활용됩니다.
int result = nullableValue ?? defaultValue;
이 연산자를 사용하면 if 문 없이도 null 체크 로직을 한 줄로 깔끔하게 처리할 수 있습니다.
4. as 키워드
as 키워드는 호환되는 형식 간의 변환을 수행합니다. 캐스트(cast) 연산과 비슷하지만, 참조 변환, nullable 변환, boxing 변환만 지원한다는 점이 다릅니다. 사용자 정의 변환 같은 다른 종류의 변환은 as 연산자로 수행할 수 없으며, 이런 경우에는 일반 캐스트 식을 사용해야 합니다.
string text = obj as string;
if (text != null) { /* 변환 성공 */ }특히 as는 변환에 실패했을 때 예외를 던지지 않고 null을 반환하므로, try-catch 블록 없이도 안전한 형식 변환을 구현할 수 있다는 장점이 있습니다.