안드로이드 앱 개발기 #32 - 가독성 증진을 위한 확장 함수 사용
코틀린 언어를 배우면서 마음에 들었던 것들 중 하나는 바로 확장 함수입니다. 이것을 잘 이용하면 코드의 가독성을 크게 높일 수 있기 때문입니다. 다시 말씀 드리자면, 보다 읽기 쉬운 코드를 만들 수 있다는 것이지요. 스팀 앱 개발을 진행하면서 이에 대해 따로 정리가 필요하다고 판단하여 이번 포스트를 작성합니다.
String 클래스의 replace 메소드
String 클래스의 replace 메소드는 문자열의 일부를 다른 것으로 대체합니다. 예를 들어 이름 "John Smith"를 "John Lee"로 바꾸고 싶다면, 다음과 같이 이 메소드를 호출합니다.
val nameToUpdate = "John Smith"
val updatedName = nameToUpdate.replace("Smith", "Lee")
그런데 문자열의 일부를 삭제하고 싶다고 가정해 봅시다. 전화번호 형식이 "010-XXXX-XXXX"인데, 여기서 '-'를 제거하고 싶습니다. replace 메소드를 활용하면, 다음과 같이 코드를 작성할 수 있습니다.
val mobilePhoneNumber = "010-0000-0000"
val mobilePhoneNumberWithoutHyphen = mobilePhoneNumber.replace("-", "")
위와 같이 코드를 작성해도 되지만, 코드를 처음 볼 때 그 의미가 한번에 와닿지 않을 수 있습니다. 실무에서는 이와 같이 의미가 한번에 바로 와닿지 않는 코드들이 쌓일 수 있습니다. 그러면 버전이 올라가면서 코드는 점점 더 읽기 어려워집니다. 가능한 읽기 쉬운 코드를 처음부터 작성하는 것이 더 좋습니다.
String 클래스의 replace 메소드를 활용한 확장 함수 구현
위 문제점을 개선하기 위해 아래와 같이 확장 함수를 구현했습니다. 메소드 이름만 봐도 문자열의 일부분을 제거하기 위한 것임을 바로 이해할 수 있습니다.
fun String.removeSubstring(substring: String) = replace(substring, "")
이 메소드를 활용하여 코드를 개선한 결과는 다음과 같습니다.
val mobilePhoneNumber = "010-0000-0000"
val mobilePhoneNumberWithoutHyphen = mobilePhoneNumber.removeSubstring("-")
지난 안드로이드 앱 개발기
- #31 - RxJava2 사용하며 만난 NullPointerException: The mapper function returned a null value.
- #30 - 나이트 모드를 고려하지 않아 메인 화면 시작시 발생한 IllegalStateException
- #29 - 잊고 있었던 앱 재시작 샘플 코드
- #28 - 문자열 리소스 파일 strings.xml 어떻게 작성하면 좋을까?
- #27 - 클린 아키텍처에서 domain 모듈
- #26 - 클린 아키텍처 구현을 위한 모듈 구성
- #25 - 스팀 관련 샘플 코드 만들면서 잘못한 점
- #24 - 시작 화면 구성 요소 식별하기
- #23 - 프로젝트 초기 화면 구성부터 대략적으로...
- #22 - Kotlin 코드로 JavaScript 코드를 실행할 수 있을까?
- #21 - 실습 도중 발생한 오류: A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
- #20 - 클립보드에 텍스트 복사하는 함수 만들어 보기 (Kotlin)
- #19 - 데이터 바인딩 적용했으나 UI 자동 업데이트 되지 않는 문제
- #18 - 에뮬레이터에서 토스트 안 보이는 문제 (1)
- #17 - 유닛 테스트를 실행할 수 없는 문제 해결
- #16 - 잘 되던 유닛 테스트를 실행할 수 없는 문제
- #15 - 앱 재시작 코드
- #14 - Fragment 사용시 간혹 발생할 수 있는 Fragment not attached to Activity 문제
- #13 - Retrofit2 활용 서버로부터 받을 데이터 유형 JsonElement (JSONObject 사용 불가)
- #12 - Glide 활용하여 이미지 다운로드 받는 코드
- #11 - 처리할 수 없는 예외/크래쉬 발생시 앱 재시작하기
- #10 - 안드로이드 스튜디오 업그레이드 후 단축키가 안되면? (맥북)
- #9 - LiveData 객체에 동일 데이터 설정하면 observer 실행되는지 확인 목적의 샘플 프로젝트
- #8 - 안드로이드 스튜디오에서 빌드시 발생하는 Build Tools revision 31.0.0 오류
- #7 - 'UGC(사용자 생성 콘텐츠) 정책 미준수'로 심사 거절
- #6 - 뷰에 역마진 적용 불가시 translationX, translationY 속성 사용하기
- #5 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #4 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #3 - 무한 롤링 배너 만드는 법을 찾았으나, 높이를 wrap_content로 지정이 안 먹히는 문제점이...
- #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류
- #1 - 페이스북 로그인 연동시 발생했던 문제들
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.