Section 37.3: 변환 연산자 (Conversion Operator)

C# 에서는, 각 타입들은 사용자 정의 변환 연산자 (custom Conversion Operator) 를 명시할 수 있으며, 이는 명시적 혹은 묵시적 타입 변환을 통해 값을 다른 타입과 상호 변환을 시킬 수 있다. 예를 들어, JavaScript 표현식 하나를 나타내는 아래와 같은 클래스가 있다고 가정해 보자:

public class JsExpression { private readonly string expression; public JsExpression(string rawExpression) { this.expression = rawExpression; } public override string ToString() { return this.expression; } public JsExpression IsEqualTo(JsExpression other) { return new JsExpression("(" + this + " == " + other + ")"); } }

만약 두개의 JavaScript 값 비교를 나타내는 새로운 JsExpression 객체를 생성하고자 한다면, 아래와 같은 코드를 작성할 수 있을 것이다:

JsExpression intExpression = new JsExpression("-1"); JsExpression doubleExpression = new JsExpression("-1.0"); Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)

만약 JsExpression 클래스에 명시적 변환 연산자를 (explicit conversion operator) 추가해 준다면, 해당 명시적 변환을 통해 더욱 간단한 타입 변환을 수행할 수 있을 것이다.

public static explicit operator JsExpression(int value) { return new JsExpression(value.ToString()); } public static explicit operator JsExpression(double value) { return new JsExpression(value.ToString()); } // 사용 예제: JsExpression intExpression = (JsExpression)(-1); JsExpression doubleExpression = (JsExpression)(-1.0); Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)

아니면, 이 연산자들을 암묵적 (implicit) 연산자로 변경함으로써 더욱 손쉬운 문법을 제공할수도 있을 것이다.

public static implicit operator JsExpression(int value) { return new JsExpression(value.ToString()); } public static implicit operator JsExpression(double value) { return new JsExpression(value.ToString()); } // 사용 예제: JsExpression intExpression = -1; Console.WriteLine(intExpression.IsEqualTo(-1.0)); // (-1 == -1.0)
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts