2020년 2월 18일 화요일

c# dynamic 의미와 사용방법

일단 의미와 사용법을 알기에 앞서서 먼저 선행되어야 하는 지식인

런타임과 컴파일 타임에 대해서  여기 서 이해하고 오자


일단 핵심은

dynamic 형식은 컴파일 타임에 해석되지 않고 런타임에 해석된다.
그렇기 때문에 컴파일타임에 에러가 발생하지 않아 차후 에러에 원인분석에 어려움이 있을 수 있다.(런타임에 들어가야만 오류가 발생하기 때문에)

바로 이 지점에서 var와 dynamic이 많이 비교된다고 한다.

var apple = "사과"; Console.WriteLine(apple.Length); //apple를 치면 인텔리센스가 제시됩니다.

하지만 dynamic은 좀 다릅니다. dynamic은 object와 매우 유사하게 다루어집니다. 다음의 코드에서 컴파일러는 s.Length에 대해서는 아무런 판단도 하지 않습니다.
dynamic apple = "사과";
Console.WriteLine(apple.Length); //apple를 쳐도 인텔리센스가 제시되지 않습니다.
위의 코드는 런타임에 아무런 에러도 발생시키지 않겠지만 다음의 코드는 런타임에 에러를 발생시킵니다. 실행시 Brix 속성을 찾을수 없기 때문이죠.
dynamic apple = "사과";
Console.WriteLine(apple.Brix);


실제 프로그램 코딩시 dynamic타입은 메소드 파라메터로 자주 사용됩니다.
class Program
{    
    static void PrintValue(dynamic val)
    {
        Console.WriteLine(val.GetType());
    }

    static void Main(string[] args)
    {
        PrintValue("HelloWorld!");
        PrintValue(1000);
        PrintValue(10.50);
        PrintValue(true);
        PrintValue(DateTime.Now);
    }
}

프로젝트의 성공을 기원합니다.


출처: https://spaghetti-code.tistory.com/32 [어떻게 짤것인가]





댓글 없음:

댓글 쓰기

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...