0515 좋은 UI 개발 툴이란
260515
어저께 "나는 프로그래머다" 라는
책을 읽었다.
여러 분야 프로그래머들과의 인터뷰를 담은 책이다.
처음에 웹 개발이나 앱만 있을 것 같았지만
매우 놀랐던건
로우레벨 게임 개발로 유명하신
유영천님과의 인터뷰가 있던 점이다.
모던 cpp라던지 그런 내용이 들어있던것도 신기했다.
특히 여러 생각이 들었던 건
좋은 UI 개발 툴이란 무엇일까 하는 주제였다.
MFC / WinRT
WinForms
WPF
대충 기억나는 건 이정도고
내가 생각나는걸 넣어보면
Qt (Designer)
WxWidgets
GTK
뭐 이런게 있겠다.
저 주제에서 가장 인상깊었던건
로우레벨 API 접근성 (WinAPI 는 물론, D3D같은것도 포함)을 높이고
UI 코드로 작성하기 용이하게 하면?
디자이너가 GUI로 인터페이스를 만들 때 고려해야 할 게 많아진다.
반대로
GUI쪽을 특화하여
코드를 몰라도 xaml이나 yml, json같은걸 생성하는 형식으로 하면
생산성은 높아지지만,
네이티브 콜을 못 부르게 된다.
뭐가 더 좋냐 하면 정답은 없다.
생산성과 자유도는 Trade-off 관계이다.
물건을 공장처럼 찍어내면
분명 빠르긴 하지만 개성이 없고
수제로 만든다면
개성이 있지만 너무 느리다.
개인적으로
Qt와 wxwidgets를 써본 입장에서,
이렇게 말할수 있다.
"입문 장벽은 어느정도 있지만,
잘만 쓰면 확장성이 매우 높다"
특히 Qt에는 OpenGL 관련해서
GL화면을 바로 그려주는 기능이 있는걸로 안다.
이걸 확장하면,
어느 API라도 그냥 들고 와서 쓸 수 있다는 말이 된다.
또한 Qt는 웹 뷰어 / http 관련 지원도 잘되어있어서
대기업 프로그램 인스톨러나
패키지 관리자같은건 거의 다
Qt로 만들어진다고 봐도 무방하다.
고도 엔진을 보자.
고도는 UI이던 게임 오브젝트이던
모두 노드라는 개념으로 처리한다.
노드는 하이라키를 이루며,
다른 UI 개발 툴과 똑같이
컨테이너 안에 노드를 넣으면
그 컨테이너에 의해서 자식 노드들의
크기와 위치가 결정되는 식이다.
나도 나만이 UI엔진을 만들고 있는 입장에서,
고도엔진의 UI시스템 -
특히,
'고도엔진의 에디터는 고도엔진 그 자체로 쓰였다'
이 말처럼. 게임 엔진(라이브러리 인터페이스) 자체로
에디터를 만든다는 건
낭만이 넘치는 일이다.
실제로 내 엔진도 고도와 매우 닮아있긴 하다.
여러 state와 열거형들에 대한 기능을 가져와서
직접 구현하는 식으로 했으니까.
아무튼 고도엔진의 UI는
기본적으로 GUI와 인스펙터,
그리고 시그널 연결을 통해 이뤄진다.
이는 에디터와 코드가 절묘하게 조합된 것인데,
개인적으로는 개발자와 디자이너 모두에게
이 구조가 가장 이상적이라고 생각한다.