앱을 만들면서 한국인만이 사용한다면 String.xml을 이용하지 않고 문자열을 하드 코딩해서 사용하면 될 것이다.
하지만 만약 한국인이 아닌 다른 나라의 사람이 앱을 이용할 경우 문자열을 하드 코딩한다면 접근성이 매우 떨어질 것이다.
android:text="아이디를 입력해주세요"
예를 들어서 이러한 텍스트가 텍스트뷰에 하드코딩으로 연결된다면, 한국인은 아이디를 입력하라는 것이구나~라고 이해를 하겠지만,
다른 나라의 사람은 다른 나라의 언어로 휴대폰을 설정해도 "아이디를 입력해 주세요"라는 문구를 만나게 될 것이다.
다국어 지원
이렇게 string.xml에 value값으로 문자열을 추가해 주는 것이다.
android:text="안전한 아이디입니다"
android:text="@string/correct_id"
두 개는 동일한 결과를 보여준다.
하지만 왜 굳이 string.xml에 문자열을 추가해서 연결해줘야 할까?
답은 다국어 지원에 있다.
안드로이드 스튜디오는 Translations Editor를 통해서 다국어를 지원할 수 있는데,
string.xml에 선언된 값들을 번역기를 통해서 번역할 수 있다.
string.xml을 보면 해당 문구가 있다.
Open editor를 클릭하면
해당 화면을 볼 수 있다.
화면에서 지구를 클릭한다면,
나라를 고를 수 있다.
영어를 고른다면,
이렇게 value-en 폴더에 string.xml 파일이 추가된다.
Translations Editor에서
이렇게 값들을 입력해 준다면,
자동으로 추가된다.
써보고 느낀 점은 String.xml에 있는 key와 value에 대해서 나라를 선택하면 모든 값들을 번역해 주는 줄 알았는데
그렇게 까지는 해주지 않았다.
하지만 해당 values-en이 생성되면 언어가 영어일 경우 correct_id가 It is a safe Id가 출력될 것이다.
String.xml 값 이용하기
데이터바인딩을 사용해서 텍스트의 문자를 설정할 경우 기존에는 하드 코딩을 통해서 했었다.
textView.text = "아이디가 틀렸습니다"
왜냐면 스트링 벨류의 id 값을 들고 와야 할 방법을 몰랐다.
액티비티나 프래그먼트에서는 getString()을 지원했지만, 바인딩 어뎁터는 사용이 안된 것이었다.
하지만 textView의 context를 이용해서 접근할 수 있다.
예를 들어
fun TextView.bindIdText(~~~~){
this.text = context.getString(R.string.corret_id)
}
이렇게 접근해서 하드코딩을 제거할 수 있다.
느낀 점
string.xml에 앱에서 사용되는 모든 문자열을 key와 value 형태로 저장하는 것은 습관이 되지 않으면 힘들 거라고 생각했다.
하지만 string.xml에 정의하고 계속해서 재사용할 수 있고, 다국어를 지원할 수 있다는 점에서
다른 나라의 앱 사용자들의 접근성을 높일 수 있다는 장점이 있다.
그리고 만약 앱의 요구사항으로 title과 같은 문자열들이 바뀐다면 하드코딩할 경우 해당 title이 사용되는 모든 곳의 코드를 바꿔야 하지만,
string.xml에 정의해서 그 값을 사용한다면 string.xml의 해당 key의 value를 바꾸면 되기 때문에 효율적으로 유지﹒ 보수할 수 있을 것이다.
'Skils > Android' 카테고리의 다른 글
[Android] Github action을 이용한 CI(ktlint) (1) | 2023.11.27 |
---|---|
[Android] - Jetpack Compose (1) | 2023.10.31 |
[Android] - DataBinding (0) | 2023.10.14 |
[Android] - Navigation Component (0) | 2023.09.03 |
[Android] - Context (0) | 2023.02.22 |