게임/마인크래프트 앱 개발일기

마인크래프트 앱 개발기 9편, 자료구조를 배우다!

Lou Park 2016. 10. 31. 01:28

이번 학기, 나는 자료구조라는 수업을 듣고 있다.

자료구조와 알고리즘 정도는 알고 있어야 프로그래머라고 생각했기 때문에 가장 신경쓰며 듣는 중이다.

단순 성적 따기가 아닌, 수업 내용 하나 하나를 흡수하는데 집중하고 있다는 말이다.

자료구조 책 초반에 Big O 계산법이 나오는데, 저번에 알고리즘 독학하며 그냥 넘겼던 부분이 알고리즘의 시간복잡도를 따지는 데 중요하단 것을 깨달았다.

그리고 중첩 for 문이 상당히 효율이 떨어지는 방법이라는 것도 말이다. 말로만 들었지, 시간복잡도를 따지니 자료가 많아질 수록 중첩 for문의 성능은 기하급수적으로 떨어졌다.


마인크래프트 앱에서 가장 많이 사용하는 기능이 아이템 리스트 펼치긴데, 나는 그 기능을 중첩 for 문으로 구현 해 놓았다.

수업을 듣고 여러 실습들을 하면서 중첩 for문을 어떻게 단순 반복문 하나나 두개 연속으로 만드는가를 배우며 마인크래프트 앱에 적용 시킬 준비를 했다.

그리고 마침내 앱에 있는 중첩 for문을 while문 하나로 줄여 n^2이었던 시간복잡도가 n으로 조금 줄어들었다.

그리고 nanoTime 단위로 시간을 재어 보았더니 역시나 바꾼 부분이 더욱 빨랐다.

바뀐 속도를 체감하기란 살짝 어렵지만 그래도 숫자가 성능을 말해주니 뿌듯했다.


아래는 Test 결과다.

test가 while문 하나로 구성된 코드, original이 중첩 for문으로 구성된 코드이고, 그 뒤는 각각 실행시간(nanoTime)이다.

마지막 result는 더 빠른 코드가 그렇지 않은 코드에 비해 얼마나 빠르게 실행되었느냐이다.

<test>

블록 : 173,527,187

자원 : 25,320,520

장비 : 30,994,583

기타 : 53,106,927

음식 : 60,220,000


<original>

블록 : 246,957,188

자원 : 31,169,271

장비 : 37,742,760

기타 : 73,443,437

음식 : 56,114,531


<result>

블록 : (test) 73,430,001

자원 : (test) 5,848,751

장비 : (test) 6,748,177

기타 : (test) 20,336,510

음식 : (original) 4,105,469