NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# 34. 변환 연산자. (casting operator)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘은 변환 연산자에 대해 알아보겠습니다. 우리가 일반적으로 사용하던 casting을 클래스에 직접 구현해줌으로써 좀 더 풍부한 기능을 제공할 때 변환 연산자를 사용합니다. 뭐 포장하면 이렇다는 이야기입니다-_-; 연산자 오버로딩처럼 잘 사용되지 않습니다. 주로 상속 관계에서 클래스를 형변환 하기 때문에 아주 특수한 경우가 아니라면 클래스를 다른 형식으로 변환할 일은 그다지 많지 않기 때문입니다.

    D3bhEc7.jpg

     

     

    클래스의 형변환에 대한 내용은 아래 글을 참고하세요.

    클래스의 형변환 (Type casting) ]

     

    형변환은 두가지가 있습니다. 명시적(explicit) 형변환과 묵시적(implicit) 형변환이죠. 문법은 아래와 같습니다.

    1. public static implicit operator ResultObject(SourceObject s);

    2. public static explicit operator ResultObject(SourceObject s);

     

    ResultObject는 형변환 후 반환될 객체를 나타내고 SourceObject는 형변환 할 객체를 나타냅니다. 아래 예제를 통해 간단하게 테스트 해보죠.

    Program.cs

    using System;
    
    namespace CastingTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    byte b = 3;
                    Digit d = (Digit)b;
                    // 명시적 형변환.                
                    d = new Digit(3);
                    b = d;
     
                    // 묵시적 형변환은 캐스팅이 필요 없다.             
                    Console.WriteLine(d);
                    Console.ReadKey();
                }
                catch (System.Exception e)
                { System.Console.WriteLine("{0} Exception caught.", e); }
            }
        }
        struct Digit
        {
            byte value; public Digit(byte value)
            {
                if (value > 9)
                { throw new System.ArgumentException(); }
                this.value = value;
            }
            public static explicit operator Digit(byte b)
            // 명시적 바이트에서 숫자 변환 연산자        
            {
                Digit d = new Digit(b); // 명시적 변환            
                System.Console.WriteLine("Conversion occurred.");
                return d;
            }
            public static implicit operator byte(Digit d)
            // 묵시적 숫자에서 바이트 변환 연산자       
            {
                System.Console.WriteLine("Conversion occurred.");
                return d.value; // 묵시적 변환        
            }
        }
    }

     

     

    Digit은 손가락으로 셀 수 있는 수를 말합니다. 그래서 0부터 9까지 10개의 수를 표현할 수 있죠. 그렇기 때문에 byte에서 Digit로 변환할 때는 명시적으로 변환한다는 것을 알려줘야 합니다. 만약, 9보다 큰 수가 들어오면 문제가 발생하기 때문입니다. 하지만 반대로 Digit이 표현할 수 있는 모든 수는 byte에서도 표현할 수 있기 때문에 묵시적으로 변환이 일어나도 문제가 되지 않습니다. 이런 차이를 잘 이해하고 넘어가는게 좋겠죠? 자주 사용되지 않는다고 하더라도 알아두면 언젠가는 도움이 될겁니다.

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.