Kotlin

Android

종종 간과하는 문제 해결 에피소드(feat. Handler, Thread)

오늘은 회사에서 마주한 에러를 해결했던 에피소드를 적어보고자 한다. 사실, 되게 사소하지만 크리티컬한 문제였다. 가장 먼저 오늘 마주한 에러를 다시 재현하기 위해 내 노트북에서 샘플앱을 만들었다 ㅋㅋㅋㅋㅋ 마주한 에러 로그를 첨부하겠다. java.lang.RuntimeException: Can't create handler inside thread Thread[Timer-0,5,main] that has not called Looper.prepare() at android.os.Handler.(Handler.java:227) at android.os.Handler.(Handler.java:129) at android.app.Dialog.(Dialog.java:138) at android.app.Dialo..

프로그래머스

369게임 코틀린(Kotlin)

오늘 풀어본 문제는 최근 풀었던 7의 개수와 비슷한 느낌의 문제였다. 문제 주어지는 숫자를 문자열로 변경해 해당 문자열의 모든 인덱스에 3, 6, 9가 있는지 검사하면 되는 문제였다. 풀이 if문이 생각보다 조건이 길어져 세로로 줄바꿈을 해봤다. 실행 결과

프로그래머스

잘라서 배열로 저장하기 코틀린(Kotlin)

이번엔 최근 푼 문제 중 그나마 코드 길이가 길어졌던 문제같다. 문제 이 문제가 생각보다 귀찮았던 이유는 어느 인덱스에서 문자열을 잘라내 배열에 대입해줄까 였다. 게다가 모든 문자열이 딱 나누어 떨어지는 길이로 문자열을 주는 것이 아니기 때문에 그에 대한 처리도 필요했다. 풀이 나는 일단 문자열을 인덱스를 통해 잘라내기 위해 substring을 사용할 계획을 세웠다. 이 때, startIndex와 endIndex를 주어야 했는데 인덱스 값을 구하는게 문제의 전부였던 것 같다. 일단 문자열이 주어진 n으로 나누어 떨어지는 경우와 아닌 경우로 구분을 했다. 그래서 나누어 떨어지는 경우는 특별히 인덱스에 대한 고민이 필요없었다. 나누어 떨어지지 않는 경우에 인덱스 값을 조정하지 않으면 exception이 분명..

프로그래머스

A로 B만들기 코틀린(Kotlin)

이번에 풀어본 문제는 별 생각없이 골랐는데 오랜만에 정렬을 해보게 되었다. 문제 가장 먼저 눈에 들어온 조건은 주어지는 두 String의 길이가 같다는 것이었다. 그리고, 입출력 예를 보면 두 문자열의 순서에 대해 언급하는 부분이 있다. 이 부분에서 아이디어를 가져와 String을 Array로 잘라내서 정렬을 한 뒤 두 배열의 같은 인덱스 값을 비교해 풀었다. 풀이 반복문을 실행하다 만약 두 배열의 같은 인덱스 값이 다르면 바로 0을 리턴하고 조건문에 걸리지 않았다면 1을 리턴하도록 했다. 실행 결과

프로그래머스

7의 개수 코틀린(Kotlin)

이 문제는 저번보단 훨씬 익숙한 문제였다. 풀이 주어지는 값을 보니 Int형 Array였다. 그런데 7이 포함되는지 보려면 이 값이 String인 경우가 검사하기 더 편했다. 풀이 IntArray의 원소를 String으로 가져와 해당 String의 모든 인덱스에 7이 있는지 검사했다. 실행 결과

프로그래머스

인덱스 바꾸기 코틀린(Kotlin)

이번에는 내가 거의 써보지 않은 클래스를 사용해본 문제였다. (아마.. 아예 안 써봤을수도..?!) 문제 요즘 회사에서는 거의 자바를 쓰다보니 자연스레 자바의 메소드들이 떠올랐다. 그래서 처음엔 String을 배열처럼 접근해 해당 인덱스의 문자를 바꾸려 했지만 접근이 불가능했다. 역시 자바 스타일로는 해결할 수 없는 문제가 있었다. 결국 초심자의 마음으로 문자열 특정 인덱스 바꾸기 등등의 검색어를 통해 구글링을 한 결과, StringBuilder를 사용해보았다. 풀이 실행 결과 생각보다 실행 속도는 엄청 빨랐다!

Android

원하는 화면에서 앱이 백그라운드로 진입 시 종료시키기(feat. Application)

회사에서 진행하는 프로젝트 요구 사항 중 특정 화면에서 앱이 백그라운드로 진입하면 앱을 종료시키는 상황이 있었다. 고민이 많았다. 매우 단순히 Activity가 onStop될 때, 꺼버리자! 라는 생각을 했는데 당연하게도 아주 우매한 생각이었다. 왜냐하면, 예를 들어 메인 페이지에서 설정 화면으로 이동할 때 onStop이 호출되고 그냥 앱이 종료되었다. (이것도 생각못하냐고 하면 뭐... 할 말이 없다) 그럼 어떻게 할까 일단 앱이 백그라운드로 진입할 때 무조건 onDestroy까지 호출될 수는 없었다. 여러 고민을 거쳐 결국 라이프사이클을 사용해 구현해냈다. 1. 먼저, 모듈 수준의 build.gradle에서 라이브러리를 추가해주어야 한다. implementation 'androidx.lifecycle..

프로그래머스

암호 해독 코틀린(Kotlin)

이번 문제는 이름이 흥미로워서 선택해보았다. 문제 cipher라는 문자열이 주어지고 code라는 정수가 주어지는데 간단히 for문을 사용해 code만큼의 step을 주면 되겠다! 생각했다. 풀이 여기서 평소와 다르게 for문의 시작 인덱스가 code - 1인데, 이는 무조건 cipher의 0번 인덱스의 값은 가져오면 안되기 때문이다. 실행 결과

프로그래머스

배열의 유사도 코틀린(Kotlin)

오늘도 코틀린 몸풀기용 문제를 하나 풀었다. 요즘 코틀린 공부를 책을 통해 하고 있는데 자바와 비교해서 하다보니 생각보다 쉽지 않은 언어같다. 문제 s1과 s2에 같은 원소가 있다면 result값을 1씩 증가시키면 되는 문제였는데, 가장 큰 고려사항은 s1과 s2가 중복된 원소가 있는 지였다. 그런데 제한사항에서 중복된 원소는 없다고 했으므로 각 원소의 중복 여부는 1번만 체크될 것이다. 예를 들어, "a"가 s1에 있고 s2에 "a"라는 원소가 있다면 무조건 "a"의 중복 횟수는 1번이다. 그래서 아주 마음 편하게 중첩 for문을 사용해 문제를 풀어보았다. 풀이 s1의 각 원소가 s2에 있는 지 확인하는 코드이다. 만약 s1의 원소가 s2에 있다면 리턴될 answer 변수에 1을 더한다. 실행 결과

프로그래머스

숨어있는 숫자의 덧셈(1) 코틀린(Kotlin)

이번 문제는 문자열 안의 숫자를 찾아 모두 더하는 문제이다. 문제 밑에 살짝 잘린 유의사항이 있는데 연속된 숫자도 한 자리 숫자로 취급한다고 한다. 내가 이 문제를 푼 방식은 문자열의 인덱스마다 문자를 정수로 형변환하고 그 값을 더해 리턴하는 것이었다. 그런데 만약 정수로 형변환할 인덱스의 문자가 정수형이 아니라면? 당연히 에러가 날 것이다. 형변환이 불가능하다고.. 그럼 어떻게 해야할까.. 나는 try-catch를 사용했다. 만약 형변환을 하는데 에러가 발생하면 그냥 반복문을 continue하도록 처리했다. 풀이 그리고 다시 Char to Int의 형변환을 알아보았는데 나는 전에 Character.getNumericValue()를 사용했었다. 하지만, 위의 메소드는 코틀린 버전이 낮을 때(1.5 이전)..

BonusTrack02.dev
'Kotlin' 태그의 글 목록 (4 Page)