C# 11, 유니온 타입(Union Types) 도입! 개발자들은 열광할까?

by DD
2개월 전
조회수 10

C# 11에 유니온 타입(Union Types) 기능이 추가되어, 여러 타입 중 하나를 가질 수 있는 변수 선언이 가능해짐

패턴 매칭(Pattern Matching)을 통해 유니온 타입의 값에 안전하게 접근하고, switch 표현식(Switch Expressions)으로 완전한 분기 처리가 가능해짐

기존 코드와의 호환성(Compatibility), 특히 암시적 변환(Implicit Conversion)과 명시적 변환(Explicit Conversion) 간의 우선순위에 대한 논의가 활발함

성능(Performance) 측면에서, 값 타입(Value Types)을 사용하는 경우 비박싱 접근 패턴(Non-boxing Access Pattern)을 통해 성능 향상을 기대할 수 있음

유니온 타입(Union Types)의 핵심 기능

C# 11의 유니온 타입(Union Types)은 여러 타입 중 하나를 저장할 수 있는 구조체 또는 클래스를 정의할 수 있게 해준다. [Union] 속성(Attribute)을 사용하여 유니온 타입을 정의하고, 생성자 또는 팩토리 메서드를 통해 케이스 타입(Case Types)을 지정한다. 특히, 패턴 매칭(Pattern Matching)switch 표현식(Switch Expressions)을 통해 안전하고 효율적인 방식으로 유니온 타입의 값을 처리할 수 있다.

암시적 변환(Implicit Conversion)과 명시적 변환(Explicit Conversion)의 우선순위

유니온 타입(Union Types)은 암시적 변환(Implicit Conversion)과 명시적 변환(Explicit Conversion)을 지원하며, 기존 사용자 정의 변환 연산자(User-defined Conversion Operators)와의 상호 작용에 대한 논의가 진행되었다. 사용자 정의 연산자(User-defined Operators)가 유니온 변환(Union Conversion)보다 우선시되며, 명시적 캐스팅(Explicit Cast)이 사용될 경우에도 사용자 정의 변환이 우선 적용된다. 이러한 설계는 기존 코드의 동작을 보장하기 위한 것이다.

비박싱 접근 패턴(Non-boxing Access Pattern)을 통한 성능 최적화

유니온 타입(Union Types)은 비박싱 접근 패턴(Non-boxing Access Pattern)을 구현하여 성능을 향상시킬 수 있다. 이 패턴은 HasValue 프로퍼티와 TryGetValue 메서드를 사용하여 값 타입(Value Types)의 경우 박싱(Boxing)을 피하고, 패턴 매칭(Pattern Matching) 시 효율적인 접근을 가능하게 한다. 비박싱 접근(Non-boxing Access)은 특히 값 타입(Value Types)을 케이스 타입으로 사용하는 경우 성능상의 이점을 제공한다.

유니온 선언(Union Declarations)의 간결한 문법

C# 11은 유니온 타입(Union Types)을 간결하게 선언할 수 있는 문법을 제공한다. union 키워드를 사용하여 구조체(struct)를 정의하고, 괄호 안에 케이스 타입(Case Types)을 나열하는 방식으로 유니온 타입을 선언할 수 있다. 이 문법은 대부분의 사용 사례에 적합하도록 설계되었으며, 기존 타입의 유니온 동작을 지원하거나, 다른 저장 전략을 구현하는 데 유용하다.

Unions merged into dotnet 11 preview 3