반응형

Magic Number와 String 관리

작성 계기

 처음부터 내가 작성한 앱은 아니지만, 문자열과 상수들이 Magic Number를 관리하는 클래스에 작성이 되어 있는 것을 보고 기겁을 하였다. 무엇보다 목록이 많은 프로젝트였는데, 그 많은 목록을 일일히 타이핑을 했다는 것에 대해서 대단하게 느껴졌다. 하지만, 고객사에서는 추후라도 해외 진출도 생각을 하고 있는 것으로 보이므로 힘들지만, Magic Number와 번역 가능성이 있는 것들을 분리하기로 했다.

그리고 하는김에 분리하는 기준에 대해서 작성하다 보니 일반적인 표준이 될 것 같기 때문에 정리하여 기록을 남긴다.

Magic Number

 Magic Number는 프로그램을 개발을 하다보면 상수로 자주 사용되는 값을 말한다. 특히 string 같은 문자열의 경우 ""를 사용해서 상수형 문자열의 내용이 같으나 자주 선언을 하게 되면, 선언한 횟수 만큼 메모리를 점유하게 된다(물론 최근에는 최적화 기술이 발달해서 알아서 최적화 해줄 가능성도 크다). 또한 해당 문자열이 유지보수 과정에서 수정되어야 하는 경우에는 수정해야 하는 문자열을 찾는 과정은 상당한 일이 된다.

 따라서 대부분 초급 이상의 개발자들은 이러한 Magic Number을 특별한 네임스페이스에 따로 관리를 한다. 그리고 프로그램 실행중에는 변하지 않지만 준 Magic Number에 해당이 되는 것은 Cofigure 같은 설정값을 들 수 있다. 이러한 값들도 특별한 네임스페이스에서 관리하는 것이 개발 후반으로 갈 수 록 정신건강에 좋다.

value/string 리소스

 공식 안드로이드 개발자 가이드라인에서는 다국어 지원 서비스를 원활하게 하기 위해서는 문자열을 res/value/string.xml 에 작성하기를 권장하고 있다. 그리고 다른 언어에 대해서는 한국어에 대해서는 res/value-ko/string.xml 형식으로 관리가 된다. 물론 프로젝트 관리 메뉴에서는 string 파일이 2개로 보인다. 또한 단순히 언어만 구분을 짓는 것이 아니라 기기, 화면 비율 등에 따라서 문자열을 다르게 조절할 수 있다(자세한 것은 공식 가이드라인을 참조)

Magic Number와 value/string 리소스 구분 기준

 로직을 구현하는 문자열의 경우에는 언어에 상관이 없는 문자열들은 코드상 Magic Number로 간주하고 관리하는 것이 좋다(모드, 기능명, 분기 같은 문자열은 Magic Number로 간주).

 JAVA에서는 switch문에서 문자열로 구분을 할 수 있는 기능들이 있다. 이 switch문에서 case로 입력 받는 값은 상수형이어야 한다. 그러나 리소스에서 가져온 문자열은 일반 문자열이기 때문에 바로 swith문의 분기로 사용할 수 없다. 당연한 이야기지만, 언어가 바뀌면, 기준도 바뀌는 위험이 있기 때문이다.

덤, error: unescaped apostrophe in string 에러

종종 string.xml 에 "'"가 있는 경우에 발생하는 에러이다. 해당 문자열을 ""으로 감싸주거나, ' 앞에 \을 붙여주면 된다.

반응형

'Mobile Develop > (Android)JAVA' 카테고리의 다른 글

[Android Studio]무선 디버그(wireless debug)  (0) 2020.03.25
반응형

Xamarin.Form : 안드로이드 에뮬레이터 HAX Module 에러

접하게 된 배경

무슨 잘 못을 했는지 모르겠지만, Xamarin.Form을 공부하려고 할 때 마다 안드로이드 에뮬레이터 문제가 항상 있었왔다.

 VS 2017과는 독립적으로 안드로이드 에뮬레이터(AVD Manager)는 독립적인 툴이다. 때문에 안드로이드 스튜디오를 설치를 해도 설치가 된다. 가상 기기를 구성한 것을 제대로 기동하기 위해서는 Android SDK 에서 적합한 버전을 준비해야 한다.

 여기까지 무사히 마치고 테스트에 사용할 가상 기기를 생성한뒤에 실행해서 잘되면 다행이지만, 실행이 안되는 경우가 있다.


 필자의 경우 다음과 같은 에러 메시지를 보여준 다음에 실행이 안되었다.





해결 방법

 항상 에러 메시지를 자세히 읽어 보면 답이 있다. 필자의 경우 Device Manager에서 HAX Module version 이 낮다고 하는데, 이게 뭔지 몰라서 다시 설치해보고 업데이트를 시작해 보았지만, 해결이 안되었었다. 알고보니 HAXM 이라는 인텔에서 제공하는 패치를 직접 해야한다.


필자는 haxm-windows_v7_2_0 버전을 다운로드 받았다.


인텔 HAXM 패치 페이지 링크


 구글에서 HAX module version 을 키워드로 친다음에 검색된 인텔 웹 페이지에 접속해서 다운로드 받아서 설치해도 된다. 설치방법은 그냥 다운로드 받은 압축파일의 압축을 해제하고 안에 있는 배치파일을 실행하거나 intelhaxm-android.exe를 실행하면 된다.


 개인적인 생각에는 MS에서 자동으로 업데이트를 제공해 주었으면 좋았을 텐데 아쉬운 점이 있다.


참고자료

이 양반의 블로그로 해당 모듈의 정체를 알게 되었다.



반응형

+ Recent posts