예제와 함께 Dynamic 타입을 한번에 이해하자!!

Поделиться
HTML-код
  • Опубликовано: 23 дек 2024

Комментарии • 13

  • @notnull-qe7er
    @notnull-qe7er 4 года назад +1

    좋은 강의 올려주셔서 항상 감사드립니다! 업로드 항상 기다리고 있어요^^ 새해 복 많이 받으세요.

    • @User_Masuri
      @User_Masuri  3 года назад

      안녕하세요. JYH님도 늦었지만 새해 복 많이 받으시기 바랍니다!! 기다려 주시면 다시 업로드 시작하도록 하겠습니다. 그동안 코로나 조심하세요~ :)

  • @devopskiwi
    @devopskiwi 3 года назад

    유익한 강의 항상 감사드려요

    • @User_Masuri
      @User_Masuri  3 года назад

      그렇게 생각해주신다면 감사드립니다!

  • @이지석-n2r
    @이지석-n2r 2 года назад

    강력한 타입 언어에서 저런 위험한 키워드를 지원하는것 자체가 아이러니 하네요 ㅋㅋㅋ 잘못쓰면 버그도 찾기 힘들어질거같은 느낌.
    가능하면 인터페이스를 하나 선언해서 넘기던지 하는 식이 좋아보이기도 하고..
    아니면 c++만큼 강력한 템플릿 프로그래밍 기능들이 c#에서는 타입 체크의 명목으로 많은 부분이 제한되는데, 프로그래머가 자신이 있으면 그런 제한을 푸는데 사용할 수 있을 것도 같아보이네요?

    • @User_Masuri
      @User_Masuri  2 года назад

      안녕하세요 지석님! 수준 높은 댓글 감사드립니다!
      맞습니다 dynamic 잘못쓰면 바로 런타임애러가 납니다. ㅠㅠ
      그럼에도 불구하고 dynamic keyword가 생긴 이유는 C#이 아닌 다른 기종간에 API 호출에 따른 귀찮은(?) 타입 케스팅을 줄이기 위해서 탄생했습니다.
      대표적으로 Office API의 COM API를 예를 들 수 있습니다.
      링크를 드리니 링크 안에 COM interop를 찾아서 보시면 이해가 쉬우실 겁니다!
      learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/types/using-type-dynamic#com-interop
      혹시 또 다른 의견 있으시면 언제든지 댓글 달아주시면 감사하겠습니다!
      다시 한번 댓글 달아주셔서 감사합니다!

    • @이지석-n2r
      @이지석-n2r 2 года назад

      @@User_Masuri 오피스 api를 쓸일은 없었어서 저런 내용은 몰랐네요
      그래도 가능하면 dynamic의 사용은 개인적으로 지양할 것 같습니다 ㅋㅋㅋ 느낌이 unsafe키워드랑 비슷한데
      오피스 api를 써도 일일히 캐스팅 해서 사용할 것 같네요
      강타입 언어의 최대 장점 중 하나가 컴파일 타임에 적어도 타입에 대한 체크 만큼은 확실하게 하고 넘어가기에, 런타임 때 날 수 있는 오류들을 미리 잡아주는 부분이라고 생각해서요.
      그냥 일반 소프트웨어면 아 프로그램이 자꾸 튕기네;;하고 끝날 문제겠지만
      절대 죽으면 안되는 중요한 프로그램들이 있으니까요. 비행제어기나 관제 컴퓨터 등에 들어가는 소프트웨어처럼요.
      물론 임베디드에 사용되는 제어 소프트웨어는 애초에 c#을 안쓰지만, 관제 어플리케이션은 데스크톱 환경이라 c#으로 개발할 수도 있을거 같은데,
      관제 도중 dymanic으로 인한 런타임 에러로 어이없게 튕기면 좀 무서울거같아요 ㅋㅋㅋ

  • @HealingFactor-m2e
    @HealingFactor-m2e 4 года назад

    var 형이랑 비슷하네요.
    컴파일은 아는데 런타임은 뭔지 자세히 알려주실 수 있나요??

    • @User_Masuri
      @User_Masuri  4 года назад +2

      안녕하세요~ 유현수님 좋은 질문 감사합니다~
      [컴파일타임 vs 런타임]
      컴파일타임은 현재 코드를 치고 있는 시기를 말해요.
      런타임은 코드를 실행해서 실제로 조작할 수 있는 시기를 말합니다.
      여러분이 사용하는 모든 프로그램은 런타임이라고 보셔도 됩니다.
      계산기, 게임, 윈도우, 인스타그램 앱 등등
      결국 컴파일타임에 타입을 알 수 있다는 것은 코드를 칠 때 이 변수에 들어가 있는 타입을 알 수 있다는 말입니다.
      dynamic이나 다형성을 이용해서 코드를 만들면 실제로 어떤 타입이 들어오는지는 런타임때 알 수 있습니다.
      예를 들어 볼게요
      void TestFunc(int num)
      {
      }
      파라미터로 들어온 num의 타입은 무엇일까요?
      int형인걸 알 수 있죠?
      void TestFunc(dynamic num)
      {
      }
      파라미터로 들어온 num의 타입은 무엇일까요?
      이건 실제로 프로그램을 실행(런타임)해서 이 함수를 호출하는 함수가
      파라미터로 어떤 값을 던졌는지 봐야 알 수 있습니다.
      [var type]
      우선 var 형에 대해 알고가야 할 것 같아요. var는 '축약형'이예요. 무슨말이냐면
      var list = new List();라고 하면 list에 들어갈 데이터가 List()타입인걸 보고
      var list = new List();를 컴파일러가 List list = new List();로 '컴파일타임'에 인식합니다.
      고로 var list = new List();로 적는것과 List list = new List():로 적는건
      아무런 차이가 없는 완벽히 똑같은 동작을 합니다.
      위와 같은 특징으로 var를 사용하시려면 꼭 대입연산자(=)를 통해 어떤 데이터 타입이 들어갈지 명시해야합니다.
      그래야 컴파일러는 var타입을 실제로 대입되는 값을 이용해 추론할 수 있기 때문입니다
      한마디로 var list; 와 같이 대입연산자 없이 var를 사용하는건 불가능합니다.
      정리하면 var는 그저 같은 타입을 변수 선언할 때 1번 변수에 값을 대입할 때 1번 이렇게
      총 2번 치는 것을 방지하기 위해 변수 선언시는 var를 사용하고 값을 대입할 때만 한번만 타입을 적어도 동작하게 한거예요
      MSDN에 따르면 최근 나온 C# 9.0에선 'List xs = new();' 이런 코드도 동작한다고 합니다.
      결국 이것도 List를 2번 치기 싫어서 나온 것으로 var와 같은 맥락입니다.
      감사합니다! 다른 질문이 있으시면 언제든지 댓글 달아주세요~

  • @leed3721
    @leed3721 4 года назад

    안녕하세요. 감사하겠습니다~

    • @User_Masuri
      @User_Masuri  4 года назад

      메일 주시겠어요? 메일로 답변 드리겠습니당~

    • @leed3721
      @leed3721 4 года назад

      메일주시면 감사하겠습니다. 연말 잘보내세요ㅎㅎ

    • @User_Masuri
      @User_Masuri  4 года назад

      @ᄋᄃ2ᄋ 메일 주소 확인했습니다. 빠르게 답변 드릴 수 있도록 하겠습니다.
      댓글로 적어주신 메일 주소는 다른 사람이 볼 수 없도록 삭제 했습니다~