기록
[GPT가 알려주는] Kotlin CharSequence | String | CharArray 본문
짧게 정리해볼게요.
한눈 요약
구분 정체 가변성 대표 구현/예시 주요 용도
| CharSequence | “문자 시퀀스” 인터페이스 | 구현체 따라 다름 | String, StringBuilder, SpannableString, Editable(EditText) | 파라미터 타입으로 범용 수용 |
| String | 불변 텍스트 클래스 | 불변(immutable) | "Hello", name.toString() | 일반 텍스트 데이터, Map key 등 |
| CharArray | 가변 문자 배열 | 가변(mutable) | charArrayOf('A','B') | 비밀번호 등 민감정보, 버퍼 |
핵심 차이
- 타입 성격
- CharSequence: 길이/인덱스/부분시퀀스 같은 공통 연산만 약속하는 인터페이스.
→ Android의 EditText.getText()가 돌려주는 Editable도 CharSequence. - String: CharSequence의 대표 구현. 불변이라 스레드 안전하고 Map 키에 좋음.
- CharArray: 배열(원시 타입 배열). CharSequence 아님. 인덱스 수정 가능.
- 가변성 & 안전성
- String: 변경 불가 → 참조 공유/캐시/키로 안전.
- CharArray: 값 덮어쓰기 가능 → 비밀번호처럼 사용 후 fill('*')로 지워 보안에 유리.
- CharSequence: 구현체에 따라 다름 (String=불변, Editable/StringBuilder=가변).
- API 호환
- 대부분의 “텍스트를 받는” API는 CharSequence 파라미터를 받음 → String, Editable, Spannable 등 모두 전달 가능.
- 보관/저장은 보통 String으로 스냅샷(toString()) 떠서 저장.
- 배열 연산/버퍼링은 CharArray.
- 연산 메서드
- CharSequence: length, get(index), subSequence(start,end).
Kotlin 확장으로 substring, isNullOrBlank 같은 함수도 많이 지원(반환은 보통 String). - String: substring, replace, split, toInt() 등 풍부한 텍스트 유틸.
- CharArray: 배열 연산(size, 인덱스 할당, copyOf, sliceArray). substring 없음.
- 성능/메모리 팁
- 많은 연결(+)은 StringBuilder(CharSequence 구현)로 누적 후 toString().
- CharArray는 중간 버퍼로 효율적이고, 종료 시 덮어쓰기 가능.
- String은 한 번 만들면 내용 변경 불가(쓰레드 안전, GC 시까지 남아 있을 수 있음).
- 동등성 비교(==) 함정
- Kotlin에서 String의 ==는 내용 비교(OK).
- CharArray의 ==는 참조 비교 → 내용 비교는 contentEquals(otherArray) 사용.
- CharSequence끼리의 equals는 구현체에 따라 다를 수 있음 → 문자열 비교는 toString() 후 비교가 안전.
실제 개발에서 어떻게 쓰나
- 함수 파라미터: 다양한 구현을 받고 싶다면 CharSequence로 받기
- fun parseHex(input: CharSequence?): Int? = input?.toString()?.toIntOrNull(16)
- 모델에 저장: 보통 String으로 저장 (스냅샷)
- val s: String = editText.text.toString() // Editable(가변) → String(불변)
- 민감 정보(비번, 토큰): CharArray
- val pwd: CharArray = textInput.toCharArray() try { // 사용 } finally { pwd.fill('\u0000') // 메모리 덮어쓰기 }
변환 치트시트
// CharSequence ↔ String
val cs: CharSequence = editText.text // Editable implements CharSequence
val s: String = cs.toString()
// String ↔ CharArray
val arr: CharArray = s.toCharArray()
val s2: String = String(arr)
// CharArray 내용 비교
if (arr.contentEquals(other)) { /* equal */ }
Android 맥락 팁
- TextWatcher/doAfterTextChanged의 콜백 인자 s: Editable? → CharSequence.
저장·파싱 전에는 toString() 해서 스냅샷을 만들 것. - SpannableString/SpannedString/Editable 모두 CharSequence.
**스타일(span)**을 유지하려면 CharSequence로 다루고, 값만 필요하면 toString().
필요하면 네 코드 베이스의 함수 시그니처(파라미터/리턴)를 올려주면, 어디를 CharSequence, 어디를 String으로 둘지 구체적으로 정리해줄게!
'잡동사니 > GPT가 알려주는' 카테고리의 다른 글
| [GPT가 알려주는] Android Scope (0) | 2025.10.22 |
|---|---|
| [GPT가 알려주는] 명령형 vs 선언형 (0) | 2025.10.22 |
| [GPT가 알려주는] CAN 통신 TP & BAM (0) | 2025.10.16 |
| [GPT가 알려주는] ksp와 implmenetation의 차이 (0) | 2025.10.15 |
| [GPT가 알려주는] RecyclerView의 scrollbarStyle (0) | 2025.10.15 |