ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TryParser Pattern.
    개발노하우/others. 2009. 7. 4. 10:41


    TryParse 패턴 이란 무엇인가?

    TryParse 패턴을 이해하기 위해 우리에게 익숙한 TryX 메소드를 먼저 살펴 보고 이야기 해 보자구요.

    1. Parse vs. TryParse vs. Convert
    2. TryPase 패턴이란?
    3.  Tester-Doer 패턴?


    1. Parse vs. TryParse vs. Convert
    개발 할때 , 너무도 많이 사용합니다. 형변환을 해야하는 할때가 빈번하죠, 거의 string 을 기준으로 형변환 경우의 수가 많습니다. 3가지 모두 형변환을 해주는 메소드 입니다. 같은일을 하는데 왜 복잡하게 3가지나 만들어 놓아서 혼란스럽게 만들까요?

    Parse 메소드

    string stringAmount = "10";
    을 Int32 타입으로 변경할 때 우리는
    int intAmount = Int32.Parse(stringAmount)
    방법을 사용합니다.

    하지만 런타임시에 정확하게 Int32 값으로 변환 할 수 있는 값이 stringAmount에 존재 한다고 보장할 수 없습니다.
    null value가 대입된다면 ArgumentException , 숫자 포멧이 아닐 경우에 FormatException , 범위보다 큰 값 일 경우에는 OrverFlowException이 발생하게 됩니다.


    TryParse 메소드

    .Net 2.0에 추가된 메소드 입니다. Parse가 있는데 TryParse는 또 뭐야?  이유는 Exception 처리에 비용이 많이 소요 된다는 것입니다.  개발자가 형변환을 할 때 마다 Execption을 처리하거나, Exception을 Throw 하는 것은 비용이 많이 들며, Exception Throw는 성능에 부정적인 영향을 줄 수 있습니다.

    TryParse는
    bool ret = Int32.TryParse(str, out intValue);
    와 같이 사용되며, 변환이 가능하면 out 매개변수로 변환된 값을 전달해 주고, 리턴 값으로는 true를 반환해 줍니다. 반대의 경우에는 false를 반환합니다.

    리턴 값으로 판단을 해서  다음 작업을 처리 하는 것이지요.

    TryParse는 내부적으로 예외 체크를 하지만 , 예외를 throw 하지 않고, 대신에 true/false를 리턴하는 것이지요. 말하자면 값을 이용한 에러 처리 방법입니다. 이는 Parse를 사용할 때의 복잡성(예외를 hand write 코드로 처리한다고 했을때 )과 성능적인 이슈를 보완해 줍니다.


    TryParse의 구조는


    public static bool TryParse(
     string s,
     out int result
    )로 정의 되어 있으며, 내부적으로는public static bool TryParse(string s, out int result){bool ret = false;try{result = Int32.Parse(s);ret=true;}catch(System.ArgumentException) {}{}catch(System.FormatException){}catch(System.OverFlowException){}return ret;}와 같이 처리 되는 것이지요.세번째로 Convert 메소드를 확인해 봅시다.int intValue = Convert.ToInt32(string s) 와 같이 사용되며, 내부적으로는 ArgumentException만 검사해주고 이 경우 0을 리턴 합니다.성능적인 이슈는 정상인 값이 전달 되었을 때에는 거의 같으며, 정상이 아닌 값이 전달 되었을때 TryParse > Convert > Parse 순서로 빠릅니다. 자세한 예제와 영문 글은 아래 링크를 참조하세요

    Performance Profiling Parse vs. TryParse vs. ConvertTo

    2. TryParse 패턴이란 ?
    위를 통해서 TryParse (TryX)메소드가 무엇이고, 구현 방법은 어떻게 된다는 것을 아셨을 것입니다.
    TryParse 패턴이란  어떠한 테스크와 '관련' 한 '잘 정의된 테스트'를 포함한 래핑된 어떤것을 제공하는 패턴을 의미합니다.
     
    3. Tester-Doer 패턴이란?
    최대 유효 테스트를 수행하고(Tester) 유효할때에만 수행한다(Doer)
    Tester-Doer와 TryParse 패턴에 대한 Cwalina 의 포스트,   MSDN의 예외처리 더 읽기를 바랍니다.

Designed by Tistory.