최근 직장을 이직하면서 요새 나의 주 언어는 ActionScript가 되었는데,
기존에는 생각할 필요가 없었던 자료구조를 다루게되어 꽤 흥미있는 코딩을 하고 있다.
그렇다고 정말 엄청난 사고를 요하는 건 아니고 단순한 내용인데 나에게만 흥미있는..
발단은 사소한 한 가지였는데,
아트팀에서 콤보박스에 아이폰과 같은 효과를 넣기를 원했다.
예를들면 스크롤을 할 때 부드럽게 움직이는 효과를 준다던가,
혹은 지울 때 효과를 내면서 사라진다던가,
스크롤 끝에 도달하면 튕기는 듯한 느낌을 준다던가 하는 것 말이다.
스케일폼의 콤보박스는 보여줄 만큼의 아이템렌더러를 미리 확보해두고,
아이템렌더러 내부의 데이터의 변경을 바꿔서 그려주는 방식을 채택하고 있었다.
만약 내가 스크롤을 내린다면,
렌더러의 위치는 가만 놔두고 내용만 변경하는 그런 식이다.
사용자 반응에 대해 효과를 보여주기 위해서는,
방금 사용자가 행한 동작이 무엇인지 알아야될 필요가 있는데,
단순히 데이터만 교체하는 식으로는 대체 직전에 사용자가 뭘 건드렸는지 알 수가 없었다.
그래서 사용자 반응을 파악하기 위한 방안은,
데이터를 업데이트하는 방식을 버리고,
사용자가 행할 동작을 입력받는 방식으로 변경하는 것이었다.
일례를 들면 아래 위의 아이템을 바꾼다고 치면,
각 아이템에 해당하는 내용을 직접 바꾸게 하거나,
아이템렌더러의 위치를 직접 바꾸도록 하는 게 아니라,
내가 지금 Swap이라는 동작을 행할 것이란 것을 받는 것이다.
그래야 내가 Swap이라는 사용자 반응에 대한 효과를 틀어줄 수 있기 때문이다.
데이터 구조를 바꿈에있어 그 결과만이 중요한 것이 아니라,
사용자가 어떤 의도를 가지고 이걸 이렇게 편집했는지도 정보를 수집해야 하는 것이다.
이 의도에 대한 수집덕분에 기존 알고리즘에 추가 제한이 더 생기게 되었다.
최근에 이 의도에 의해서 알고리즘을 바꿔야할 경우가 생겼는데,
바로 정렬이다.
특정 정렬 상태에서 다른 정렬 상태를 보여주고 싶었는데,
그 이동을 직접 사용자에게 눈으로 보여주고 싶었다.
그리고 그 이동이 위치가 높은 순서대로 먼저 배치되게 하고 싶었다.
그러기 위해서는 배열 중간중간에 대한 정보가 필요했다.
간단히 정렬을 하려면 퀵소트나 버블소트를 쓰면 되었겠지만,
중간에 원하는 상태에 대한 결과를 알 수 없었기 때문에 다른 방식을 써야했다.
결과적으로 저 조건들을 만족하는 방식으로 생각해낸 것은,
리스트에서 최소값에 해당하는 아이템을 찾아내서 그걸 새로운 배열에 집어넣는 방식이다.
(이게 아마 삽입정렬이던가? 기억이 잘..)
알고리즘을 배우면서 다른 정렬을 쓸 일이 있었을까 싶었는데..
이런 경우에 쓸 수 있군하고 알게된 것이 소소한 기쁨이랄까..!
나에게 꽤 흥미있는 주제였다.
기존의 자료구조나 알고리즘이라고 하면
보통 대용량 처리나 속도와 공간에 대한 효율에 대한 제고만 했다면,
이번에는 중간 과정 혹은 거쳐야만 하는 상태에 대한 변수가 늘었다.
혹시 이런 분야에 대해서도 연구가 되있을까?
요새는 그렇게 해보고 싶던 플래시 개발을 해보면서,
이전에 생각하던 아트팀과 협업에 대해서 직접 경험하며 느끼고 있다.
그리고..
C#쓰다가 ActionScript를 쓰니 정말 얼매나 편하던지..
대충 생각한 대로 언어를 쓰면 그게 돌아가는 게 참 재밌네.
하여간 소소하게 느끼던 것들을 간만에 올려본다.
'프로그래밍 > ETC' 카테고리의 다른 글
Nexon Developer Conference 2012 (NDC) 참관기 (4) | 2012.04.24 |
---|---|
게임제작에 최적화된 언어에 대한 공상 (6) | 2010.01.13 |
Crazy Eddie's GUI System (12) | 2009.08.06 |
C#의 char의 크기는? (8) | 2009.02.26 |
Open Subversion(SVN) Storage (5) | 2008.12.12 |