이 글은 안드로이드에서 자주 사용되는 코드이지만, 자주 잊어버리는 류의 코드에 관한 것입니다.

 

문제는 "오늘은 OO를 XX개 먹었습니다."를 표현하는 것입니다. 예전에 안드로이드를 잘 모를 때 해결했던 방법은 아래와 같습니다.

<string name="eat">오늘은 사과를 %d 개 먹었습니다.</string>
val count = 5
var text = String.format(getString(R.string.eat), count)

 

그런데, 알고 봤더니 이미 이런 것들에 관한 것은 개발자 페이지에 아주 상세히 설명되어 있었습니다.

getString() API 에 이미 이런 상황에 대해 대비가 되어있었던 것입니다.

그것도 이미 API level 1 에서 말이죠.

(developer.android.com/guide/topics/resources/string-resource?hl=ko#%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%84%9C%EC%8B%9D-%EC%A7%80%EC%A0%95)

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
var text = getString(R.string.welcome_messages, username, mailCount)

 

안드로이드 개발자 사이트 링크

developer.android.com/reference/android/content/Context?hl=ko#getString(int,%20java.lang.Object...)

getString(int resId, Object... formatArgs)Returns a localized formatted string from the application's package's default string table, substituting the format arguments as defined in Formatter and String.format(String, Object...).

 

안드로이드 Resources.java 소스 코드

    @NonNull
    public String getString(@StringRes int id, Object... formatArgs) throws NotFoundException {
        final String raw = getString(id);
        return String.format(mResourcesImpl.getConfiguration().getLocales().get(0), raw,
                formatArgs);
    }

 

즉, String.format 으로 어렵게 코딩하지 않고, getString() 에 인자만 더 추가해 주면 됩니다.

 

 

기왕 글을 쓴 김에 노파심에 몇 가지 더 추가하면, 크게 두 가지 입니다.

첫째, 입력 값이 여러 개인 경우, 둘째, 입력 값이 복수일 경우입니다.

물론, 우리 나라에서만 사용한다면, 이 두 가지 모두 큰 의미는 없습니다.

 

1. 위에서 %1, %2 와 같은 표현들이 있는데, 이것은 입력 값의 순서를 의미합니다.

간혹, 언어를 번역하다보면, 입력 값들의 순서가 아래 코드처럼 바뀌는 경우가 있기 때문입니다.

<string name="eat">나는 %1$s를 %2$d개 먹었습니다.</string>
<!-- 나는 사과를 2개 먹었습니다. -->
<string name="eat">I ate %2$d %1$s</string>
<!-- I ate 2 apples -->

 

2. 위의 경우 처럼 복수가 될 경우, apple -> apples 로 사용해야할 수도 있습니다.

물론, 개발자 사이트에 상세히 설명되어 있지만,(https://developer.android.com/guide/topics/resources/string-resource?hl=ko#Plurals)

간단히 부연 설명을 하면, 이럴 때에는 별도로 getQuantityString() 와 plurals.xml 을 사용해야 합니다.

<resources>
    <plurals name="numberOfSongsAvailable">
        <item quantity="one">%d song found.</item>
        <item quantity="other">%d songs found.</item>
    </plurals>
</resources>
val count = getNumberOfSongsAvailable()
val songsFound = resources.getQuantityString(R.plurals.numberOfSongsAvailable, count, count)

 

 

잡담.  길다고 하면 긴 시간동안 코딩을 해왔지만, plurals.xml 을 적용한 경우는 거의 본 적이 없습니다. ㅋ

그래도 알아두면 언젠가 쓰는 날이 오겠지요. ㅋ

 

와우 드디어 안드로이드 스튜디오에 DB inspector 가 들어왔습니다.

해당 기능은 Android 스튜디오 4.1 Canary 6 이상(이 글을 쓰는 시점보다 약 6개월 정도 전?) 에서 확인할 수 있습니다.

4.1 업데이트 이후 inspector 를 기본 탭에 추가시켜줬기에 알아차렸지 그렇지 않았더라면 알지도 못했을 것 같습니다.(developer.android.com/studio/preview/features?hl=ko#database-inspector)

 

앱을 개발하면서, DB 에 어떤 내용이 들어가 있는지 확인하는 것은 매우 귀찮고 까다로운 일이었습니다.

왜냐하면, 지금까지는 adb 를 통해, db 파일을 내려받은 뒤, 그 파일을 다시 SQLite Browser 같은 application 을 사용해서 일일이 확인해야 했기 때문입니다.

게다가 Room Database 를 사용하는 경우, 보통 비동기로 동작하기 때문에 값을 확인하는 것은 매우 귀찮은(?), 까다로운 일이었습니다.

 

사용법은 그리 어렵지 않습니다. 단순히 디버그 모드의 앱을 실행시키면, DB 의 내용은 쉽게 볼 수 있습니다.

developer.android.com/studio/inspect/database?utm_source=android-studio

 

Debug your database with the Database Inspector  |  Android 개발자

In Android Studio 4.1 and higher, the Database Inspector allows you to inspect, query, and modify your app's databases while your app is running. This is especially useful for database debugging. The Database Inspector works with plain SQLite and with libr

developer.android.com

 

하지만, 아직 GUI 에서 바로 수정하는 것은 허용하고 있지 않습니다.

아직 많은 기능을 제공하고 있지는 않지만, New Query Tab 을 이용해서, row 를 삭제하거나 삽입할 수는 있습니다. 

아이콘을 클릭하면 New Query Tab 이 생성됩니다.
New Query Tab

 

그나마 조금 편리한 기능이라고 한다면, Room Database 를 사용할 경우 @Query annotation 과 New Query

Tab 과 연동시켜놓았다는 것 정도입니다.

- 아래 그림에서 @Query annotation 옆에 표와 돋보기가 그려진 아이콘을 클릭하면, 실행할 수 있습니다.

Parameter 가 필요할 경우, 생성된 창에서 값을 추가해 준 뒤, Run 을 클릭하면 됩니다.

(medium.com/androiddevelopers/database-inspector-9e91aa265316)

Line Number 오른쪽에 돋보기 모양 아이콘을 누르면 Query parameter 를 추가해서 실행할 수 있습니다.

 

 

DB insert/update/select 가 쉽지 않더라도, 단순히 DB 내용을 볼 수 있다는 것 만으로도 앱 디버깅에는 많은 시간 절약이 될 것으로 보입니다.

 

 

 

 

이전 글 : Color Tool

 

이전 글은 칼라 값의 설정이었다면, 이번 글은 아이콘에 관한 글입니다.

 

안드로이드 스튜디오의 Image Asset 툴은 나 홀로 앱 개발을 할 때 필요한 강력한 툴 중 하나입니다.

 

물론, 요즘 무료 아이콘을 사용할 수 있는 사이트들도 많이 있지만, 전문적인 디자이너의 도움이 없이 간단한 아이콘들을 추가하는 것은 Image Asset 으로 충분합니다.

 

 

사용 방법은 위 두 장의 그림으로 갈음합니다.

한 두 번 클릭 해보시다 보면, 초보자라도 쉽게 사용법을 익힐 수 있습니다.

 

덧붙임 1.

안드로이드 개발자 사이트의 문서, 역시 충분히 친절하게(?) 설명되어 있어서 참고하시면 좋습니다.