오랜만에 2편을 써본다. 아무도 안기다렸지만 ㅎㅎㅎㅎ '~'
방학을 맞아서 유저들에게 약속했던 7월 대규모 업데이트를 하려 다시 안드로이드 스튜디오를 켰다.
그동안 코딩스타일을 배워 한 층 더 업그레이드 된 눈으로 다시 코드를 보니 엉망이었다.
앱 특성상 아이템을 추가할 일이 많은데, 아이템 추가하기가 번거롭고 힘들게 되어있었다.
그래서! 더욱 편하게 아이템을 추가하기 위해 나에게 조금 더 나은 인터페이스를 제공하기로 했다.
리팩토링
이전에는 아이템을 추가하려면 layout에서 아이템 아이콘을 추가하고, 개별 아이템마다 onclick="아이템이름"다는
작업을 한 뒤에, 아이템 정보가 담겨있는 ItemDB를 모아놓은 ArrayList<ItemDB>인 ItemDBList에도 정보를 업데이트 해야 했다.
그러나 아이템이 300개가 넘다보니 속도도 느려지고 한 번 작업하기 여간 까다로운 일이 아니다.
그래서 LayoutInflater, addView() 기능을 이용해 동적으로 뷰를 생성하는 쪽으로 리팩토링 방향을 잡았다.
처음에 한 두시간은 동적 뷰에 모든 시간을 할애 한 듯하다~
ㅎㅎ 포기할까~도 생각했지만 편안한 미래를 위해서 참았다.
변경전 Activity.java 파일은 무려 2297줄이다.
말하기도...부끄럽다 ㅎㅎ;
아이템 300개를 일일이 다 findViewId 시켜서 (그나마 ButterKnife 썼지만)
일일이 OnClickListener를 붙여주었었다.
그러나 변경 후는 어떨까? 아직 OnClickListener를 붙여주진 않았지만
123줄로 무려...20배나 코드 절약을 했다.
텍스트 수정엔, Python!
이 Activity.java 리팩토링의 뒤에는 ItemDBList와 ItemDB의 수정이 있었다.
ItemDB의 멤버 변수와 생성자를 수정함으로서 ItemDB 자체에 Category를 분류하는 기능이 생겼다.
그러면서 ItemDBList도 포맷을 변환해야 할 일이 생긴 것이다.
그래서 이번에는 Python을 이용하기로 했다. Python의 강력하고 간단한 기능이라면
코드 몇줄 만으로 텍스트를 바꾸는 일을 처리할 수 있을 것 같아서였다.
결과는? 정답정답!! Python 은 내 몇 시간의 수고를 덜어주었다. 자주 애용해야지 'v'
이것은 대략 변경 전 ItemDBList의 상태 ^^ 저 한줄한줄 모두를 바꾸려니 ㅎㅎ;
파이썬 없었으면 동생 돈주고 시킬뻔했다. 사람이 하면 실수가 많지만...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # writedata.py # reference armorWords = ["chestplate", "leggings", "helmet", "mask", "boots", "armor", "head"] weaponWords = ["sword", "bow", "shield", "arrow"]; resourceWords = ["ingot", "ore", "emerald"]; toolWords = ["axe", "shovel", "nametag", "book", "map", "stand", "clock", "hoe"] transportWords = ["cart", "rail"]; mechaWords = ["trap", "command", "door", "weight"] foodWords = ["fish", "steak", "pork", "egg", "potato", "raw", "cook", "seed", "carrot", "soup", "cake", "pie", "watermelon"] dyeWords = ["dye", "bonemeal", "rose", "flower", "cyan", "magenta", "orange", "inksac"] f = open("C:/Users/jizard/Desktop/code.txt", "r") f2 = open("code_after.txt", "w") while True: line = f.readline() if not line: break words = line.split("R.string.") word = words[2].split(","); keyword = word[0]; # for categorize type = "BLOCK" for i in armorWords : if keyword.find(i) != -1 : type = "ARMOR"; break; for i in weaponWords: if keyword.find(i) != -1: type = "WEAPON"; break; for i in resourceWords: if keyword.find(i) != -1: type = "RESOURCE"; break; for i in toolWords: if keyword.find(i) != -1: type = "TOOL"; break; for i in transportWords: if keyword.find(i) != -1: type = "TRANSPORTATION"; break; for i in foodWords: if keyword.find(i) != -1: type = "FOOD"; break; for i in mechaWords: if keyword.find(i) != -1: type = "MECHANISM"; break; for i in dyeWords: if keyword.find(i) != -1: type = "DYE"; break; code = "add(new ItemDB(ItemDB.Category." + type + ", \"" + keyword + "\", context));\n" f2.write(code) f.close() | cs |
하지만 위와 같은 파이썬 코드로 한 번에 아래와 같이 정리할 수 있었다.
아이템에 특정 단어가 들어가면 카테고리 정리도 할 수 있게 해서 더욱 유용했다!
자주 자주 애용해야겠다.
'게임 > 마인크래프트 앱 개발일기' 카테고리의 다른 글
마인크래프트 앱 개발기 7편 "앱 레이아웃 정리!" (0) | 2016.08.04 |
---|---|
마인크래프트 앱 개발기 6편 <Method Performance 측정> (0) | 2016.07.19 |
마인크래프트 가이드 앱 개발기 5편 "개명 후 제명" (13) | 2016.07.02 |
마인크래프트 가이드 앱 개발기 4편 "개명" (0) | 2016.06.28 |
마인크래프트 가이드 앱 개발기 1편 (0) | 2016.02.07 |