2. setText를 써보자(1)

Posted by ITPangPang
2017. 3. 29. 23:30 파고들기/TextView




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에 대해

간단하게 적은 글입니다.


안드로이드 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