WPF가 익숙해지면 솔직히 DataGrid 달랑 하나 올리는 프로그램이라고 하더라도 WPF가 훨씬 구현속도가 잘 나옵니다. (저의 경우에는)
XAML을 통한 디자인의 커스터마이징은 말할 것도 없죠. Windows Forms는 디자인을 뭉개고 다시 만드는 작업을 CS 파일로 해야하지만 WPF는 Custom Control의 강력한 기능으로 구조적으로 UI를 정의할 수 있습니다.
게다가 기본적으로 하드웨어 가속 옵션을 가져가기 때문에 렌더링 시 GPU를 사용하기에 UI 상호작용에도 훨씬 빠릅니다. (물론 Windows Forms도 Control 단위마다 개별로 GPU를 쓸 수는 있습니다만 WPF와 다르게 기본적으로는 GPU를 안씁니다)
혹 XAML과의 바인딩에 Reflection이 들어가기에 성능적에서 느리다는 의견이 보이는데 이는 제가 보기엔 Reflection이라는 키워드만 보고 잘못 소문이 퍼진게 아닌가 싶습니다. Reflection이라고하더라도 최초에 IL을 런타임에서 생성할 때나 OverHead인 부분이고 이미 생성된 IL코드를 재활용하여 호출할 때는 일반적으로 stub을 호출하는 정도라 더이상의 추가 성능이슈가 없는 것으로 알고있습니다.
XAML에 대한 숙련도가 부담이라 Windows Forms로 가셔야하면 그건 그거대로 틀린 선택은 아니지만, XAML을 통해 UI가 분리되기 때문에 코드를 관심사별로 분리하여 볼 수 있기에 솔직하게 MVVM을 적용하지 않더라도 WPF를 안 쓸 이유는 없다고 생각합니다.
그리고 Reflection에 관해서는 이마저도 싫은 분들이 있어서 Windows 전용 App 이라고 하더라도 Avalonia로 가시는 분들도 있는 것으로 소문을 들었습니다.
그리고 태초에는 WPF와 VS Blend 디자이너가 함께 존재해서 분업했다고 알고 있지만 현재는 VS의 강력해짐을 통해 VS Blend가 사실상 Pen을 통한 Drawing을 직접하는 것이 아니라면 무용지물이라 다 퍼블리셔 계열로 넘어간 것으로 알고 있습니다.
그래서 NC Soft 같은데 계시는 몇몇의 극소수 WPF 산업 디자이너가 아니라면 혼자 전부 다하시는 것이 맞다고 생각합니다.
제가 여러 회사를 다녀보진 않아서 신뢰도가 높은 답변은 아닐 것 같습니다만,
일단 현재는 WPF를 주력으로 사용하고 있고, 말씀하신대로
하고 있습니다.
그렇지만 계속 하면 할수록 재활용 할만한 리소스가 계속 쌓여서 처음에는 힘들어도 나중에는 업무 처리 속도가 단축되었습니다.
그리고 퍼포먼스에 대한 제 개인적 경험에 의한 의견은, ‘숙련도에 따라 달라진다’ 라는 것이 아닐까 싶습니다.
이제는 WinForms 보다 WPF를 사용한 기간이 더 많아져서 그런지 WPF가 더 편하네요~
모든 학습의 기본 중의 기본이 반복 아니겠습니까?
그런데 장비 제어쪽이라니 반갑네요~ 그것만 하는 것은 아니지만 저도 비슷합니다. ㅎㅎ
2D든 3D든 일단 WPF에 장비 그려 놓고, 수치값 바인딩이나 상태에 따른 색상 바인딩, Transform 파라미터 바인딩을 이용한 이동, 회전, 크기 등의 실시간 변형 처리를 해 놓으면 고객 분들이 아주 좋아하십니다.
그렇지만 업무 처리 퍼포먼스가 잘 나오지 않는다면 이런 디테일은 버리는 것이 현명한 선택일 수도 있을 것 같습니다. 디테일 하나 살린다고 여러 업무 처리를 지연시켜가며 진행하는 것은, 고객으로부터 돈을 받고 일을 하는 사람으로서는 하면 안될 것 같기도 합니다. 그럼에도 불구하고 디테일을 고집해야 한다면 개인 시간을 갈아 넣을 수밖에 없겠지요…
아니면 기본 베이스는 WinForms로 만들되 장비 디테일을 넣은 부분만 WPF로 만들어서 ElementHost 위에 얹어 놓는 것도 하나의 방법일 것 같습니다. 섞어 쓰는거죠~
제가 WPF 프로젝트를 할 일이 있어, 국내 WPF관련 커뮤니티가 있으려나 검색해보다가 닷넷데브에 왔네요. 예전에도 몇 번 방문한 기억이 있는 사이트 였는데…
댓글 달려고 좀 전에 회원가입 했습니다.
제가 7~8년 전 쯤, 어느기업에서 윈폼개발자 대상으로 WPF를 강의한 적 있는데, 짧은 교육기간으로 인해 적응을 못하더라구요. 그 때 생각나서 댓글 답니다.
MVVM 디자인패턴을 적용했다면 DI와 함께 완전히 데이타바인딩으로 코드와 뷰를 분리해야 복잡도가 증가하지 않아요. 생산성은 그러한 구성이 익숙해졌을 때 나옵니다.
제가 코드 리뷰를 해드릴 수 있으니 도움 필요하면 얘기하세요. 대신 저는 장비제어쪽 분야에 관심이 있으니 그 분야에 대해 업계 분위기라던지 이런 저런 얘기 해 주세요.