Implicit Operator




목차


.NET 을 오랫동안 써 왔지만, 체계적으로 책을 보면서 꼼꼼하게 배워온 것은 아닙니다. 그러다보니 놓친 부분일지 모르겠습니다만, 이번 시간에는 implicit 라는 녀석(conversion operators)에 대해서 간략히 살펴보려 합니다. 눈치 채셨겠지만, 저는 이 키워드를 모르고 있었어요 =_=; 쓸 일도 없었고, 어디에서 본 적도 없고;;; 그러다가 우연히 보게되었는데 나름 유용할듯 합니다.




개요


이 녀석은 말 그대로 함축적으로(?) 형변환을 시켜줍니다. 좀 특이한 녀석이죠.


예를들어 제가 Number 라는 클래스를 만들었습니다. 이놈은 프로퍼티로 Value 를 가집니다. 타입은 int 형이고요. 


    [Number]


    public class Number
    {
        public int Value { get; set; }

        public Number(int num)
        {
            this.Value = num;
        }
    }





문제는 이 녀석이 정수처럼(int) 동작했으면 합니다. int x 와 사칙연산이 가능했으면 하는 것이지요.



    [사칙연산]


int x = 10;
Number y = new Number(20);
int z = x + y;





어떻게 해야 가능할까요? 이때 사용할 수 있는 것이 implicit 입니다. 아래 코드처럼 메소드(?)를 추가해 주면 됩니다.


    [implicit]


    public class Number
    {
        public int Value { get; set; }

        public Number(int num)
        {
            this.Value = num;
        }

        public static implicit operator int(Number num)
        {
            return num.Value;
        }


        public static implicit operator Number(int num)
        {
            return new Number(num);
        }
    }





쉽게 설명을 하려다보니, 예시가 그다지 좋지는 않습니다 :)

제가 실제로 유용하게 썼던 상황은 Win32 에서 사용하는 POINT 구조체와 WPF 에서 사용하는 Point 클래스간의 형변환 문제였습니다. 매번 POINT 를 가지고 Point 를 생성해서 형변환 하는것도 귀찮고, 그 반대도 마찬가지 였습니다. POINT 구조체 선언시 implicit 도 함께 넣어주니 편하더군요 :)


익숙치 않아서 그렇지, 염두에 두고 개발하다보면 의외로 유용하게 쓰일 곳이 많을 것 같아 보입니다.