2. setText를 써보자(1)
setText를 써보자
ㆍ TextView에서 가장 기본이면서 가장 많이 쓰이는
setText에 대해 알아보도록 하겠습니다.
setText
스펠링 그대로 생각해보면
set : 두다, 놓다
Text : 텍스트
텍스트를 놓는 것입니다.
지금 당연히 TextView에 대해
알아보고 있으므로
TextView에 텍스트를 놓는 것이겠지요
그렇다면 setText를
어떻게 사용하는지 알아보기
위해 레퍼런스를 보도록 하겠습니다.
https://developer.android.com/reference/android/widget/TextView.html
문서를 보니 setText를
사용하는 방법은 총 5가지가 있네요
1. setText(int resid)
2. setText(CharSequence text)
3. setText(CharSequence text, TextView.BufferType type)
4. setText(int resid, TextView.BufferType type)
5. setText(char[] text, int start, int len)
방법을 알아봤으니
사용해보면 되겠죠
setText(int resid)
첫번째 방법은
setText안에 인수로 resid를
넣으면 됩니다.
resid는
Resource Identifier로
res폴더에 있는 변수들을
의미합니다.
아래는 resid에 대해
간단하게 적은 글입니다.
안드로이드 스튜디오를 켜서
TextView를 하나 만든 후에
써보겠습니다.
TextView를 코드로 하나 생성하고
setText를 사용하기 위해서
아래와 같이 써봤습니다.
그랬더니 setText의
인자값으로 위에서 봤던
5가지를 사용할 수 있다고 나옵니다.
먼저 4번째인
int resid를 넣어보겠습니다.
친절하게
@StringRes를 넣어야된다고
나와있습니다.
이것은 위에 resid 글에서
쓰긴 했었지만,
Resource에도 Type이 있는데
그 중 String Type의 Resource를
넣어야 된다는 말입니다.
그럼 원하는 데로
@StringRes를 만들어 보겠습니다.
[res] 폴더에서
[values]를 확장 시켜보면
[strings.xml] 파일이 있습니다
여기에 들어가서
String타입의 변수를
생성해주면 됩니다.
기존에 있던 app_name 밑에
위와 같이 test_text라는
변수를 하나 만들어서
변수값으로 TEST를 넣었습니다.
이제 만든 변수를
setText 안에 넣으면 완성됩니다.
넣는 방법은 이렇게
getResources()로 리소스를 얻어서
그 얻은 리소스에서 다시 getString()를 통해서
String Type의 리소스를 받아옵니다.
String Type의 리소스도 1개가 아니라
다양할테니 괄호안에 위와 같이
고유 Identifier로 접근해서 변수값을
얻어오면 됩니다.
resid로 넣는 이유?
위에서
TextView에 Text를
setText하기 위해서
리소스 폴더에 접근해서
또 String 타입의 리소스를
통한후 id값을 통하여 변수값을
얻어와서 TextView에 Text를
찍었습니다
사실 이러한 과정 없이
아래와 같이 써줘도 결과는
똑같습니다.
그런데 왜 위에처럼
복잡하게 처리하는 것일까요?
그 이유는 바로
좀 더 유연한 개발을
하기 위해서 입니다.
간단하게 예를 하나 들면
어떤 신제품 아이스크림이 하나
나왔는데 그 아이스크림 이름이
"아이쑤쿠림" 입니다.
그럼 앱에서 아이쑤쿠림이라는
이름을 써주기 위해 setText 하겠죠?
TextView.setText("아이쑤쿠림");
자 위에처럼 이렇게 간단하게 썼다고
가정해보겠습니다.
그런데 신제품을 홍보하는데
이 아이쑤쿠림 이라는
글자가 한 번만 들어가진 않겠죠?
앱의 여러군대 들어가겠죠?
한 400군대에서 썼다고 가정하면
setText("아이쑤쿠림");
이걸 400번 했겠죠
그런데 만약 예상치 못하게
저작권? 이라든지 어떤 상황에
의해서 "아이쑤쿠림"이라는 이름을
사용하지 못하게 됬습니다.
그래서 이름을
"아이쑤쿠림" -> "아잇쑤쿠림"
으로 변경했습니다.
그럼 개발자는 앱에 들어가있는
아이쑤쿠림을 전부 아잇쑤쿠림으로
바꿔야겠죠?
그런데 위에서 아이쑤쿠림이라는
글자를 찍는데
따로 리소스 형태로 보관해서 찍은게 아니라
setText("아이쑤쿠림");
이렇게 400번 노가다를 통해서 적었었습니다.
이렇다 보니 한번에 수정할 수 없게 된 것이죠.
400번을 다시 다 수정할 수 밖에..
처음부터 String 타입의 Resource로 저장해서
사용했다면. 이름이 바뀌더라도
Resource 폴더에서 한번만 변경해주면
쉽게 바꿀 수 있었습니다.
또 위와 같은 경우 말고도
String값을 리소스로 묶어서
사용하는 이유는 몇 가지 더 있습니다.
다국어를 처리하기 위해
써야 하는 이유도 있고,
또,
안드로이드의 apk파일은
디컴파일이 가능합니다.
간단하게 말하면 apk파일만 있어도
개발자가 개발한 코드를
어느정도 볼 수 있다는 것이죠.
그래서 남들이 파일을 열었을때
String을 리소스 형태로 보관해서 사용하지 않았다면
"TEST" 라는 텍스트가 직접적으로 바로 노출되게 됩니다.
뭐 사실 남들이 코드를 보던 말던
보안상 위험만 없다고
크게 중요하지 않을 수도 있죠..
또 다른 이유는 어떤 String을
서버로 보내거나 할 때 리소스 형태로
묶어서 보내지 않고 한다면,
인코딩 과정에서 에러가 발생하는
경우도 있습니다.
그렇기 때문에 String값은 무조건
Resource으로 묶어서 관리하는 습관을
길러야 합니다.
첫번째 setText 사용방법은
이 쯤 알아보고
다음글에서
setText의 나머지 4가지
방법을 알아보도록 하겠습니다
'파고들기 > TextView' 카테고리의 다른 글
3. setText를 써보자(2) (1) | 2017.11.25 |
---|---|
1. TextView 구조와 레퍼런스 보기 (0) | 2017.03.28 |