분류 전체보기

    [Android/트러블슈팅] Keystore 정보 확인하는 법

    들어가기 전 릴리즈 apk 를 뽑을 때 keystore를 사용하게되는데, 내 keystore에 별칭을 까먹는 경우가 있었다. 이 때 내 keystore에 정보를 알 수 있는 방법을 알아보자. cmd에 keytool -list -v -keystore 'jks 파일 경로' 를 입력하고 비밀번호를 입력하면 keystore 정보가 다 나온다. 이 때 경로를 입력하려면 " " 를 지워야지 정보가 나온다. 지우지 않으면 아래와 같은 에러가 뜬다. keytool error: java.lang.Exception: Keystore file does not exist:

    [프로그래머스/Kotlin] Lv2 소수찾기 : 완전탐색

    문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다 입출력 예 설명 예제 #1 [1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다. 예제 #2 [0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다. 문제 풀이 아이디어 dfs로 푼 풀이..

    [Android/트러블 슈팅] Multiple Gradle daemons might be spawned because the Gradle JDK and JAVA_HOME locations are different. / 안드로이드 스튜디오 자동완성 에러 안뜨는 오류

    들어가기 전 kakao login api 문제로 키해시를 뽑다가 환경변수를 전부 날리는 실수를 저질렀다. 안드로이드 java home이나 gradle을 담은 환경변수가 날라갔고 그 이후로 안드로이드 스튜디오에 자동완성 및 에러가 안뜨는 문제가 발생하였다. 이를 해결하기 위한 과정과 방법에 대한 내용을 포스팅하고자 한다. Error 내용 Multiple Gradle daemons might be spawned because the Gradle JDK and JAVA_HOME locations are different. 라고 Notification에 떴다. 만약 해당 에러 없이 안드로이드 스튜디오 자동완성과 에러가 안뜬다면 Power Save Mode가 켜져있는지 확인해야한다. power save mode가..

    [Android/트러블슈팅] Kakao Login API Apk 추출 시 로그인 안되는 문제/KeyHash 오류

    들어가기 전 '엄빠도 어렸다'라는 서비스를 만들면서 겪은 kakao login api 트러블 슈팅에 대해 포스팅하고자 한다. 문제 설명 우리 팀은 릴리즈를 앞두고 안드로이드 디버그 apk와 릴리즈 apk를 추출했다. 이 apk 파일을 설치 후 어플에 접속 했을 때 애뮬레이터에서는 잘 돌아가던 kakao login이 안되는 문제가 발생하였다. error description을 보면 401 auth error, 즉 kakao 키해시 등록이 안 된 키해시가 들어왔다는 의미이다. 키해시 확인 error descption을 바탕으로 알맞는 키해시를 찾기 위해 노력했다. https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android#add-key-h..

    [프로그래머스/Kotlin] Lv2 가장 큰 수 : 정렬

    문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 문제 풀이 아이디어 사전식 정렬을 이용해서 문제를 풀 수 있다. [6, 10, 2] 가 예제로 존재 할 때 6과 10으로 610과 106 조합을 만들 수 있다. 이 때 더 큰 값은 610 이므로 6,10,2 순서를 유지한다. 10과 2 로 1..

    [프로그래머스/Kotlin] Lv2 프로세스 : Queue

    문제 설명 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다. 3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다. 현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주..

    [Kotlin] isNullOrBlank vs isNullOrEmpty 헷갈리지말자

    오늘 포스팅에서는 string의 null과 공백을 비교하는 비슷하지만 다른 두 메서드에 대해서 알아보고자 한다. 아래 예시를 통해서 두 메서드의 차이를 알아보자. var a = "string" var b = "hyeon" var c = null var d = "" var e = " " isNullOrBlank fun CharSequence?.isNullOrBlank(): Boolean isNullOrBlank는 string 값이 null이거나 공백으로만 채워진 경우 true를 반환하는 함수 이다. 위 예시 string에 isNullOrBlank 메서드를 사용하면 출력값은 다음과 같다. var a = "string" var b = "hyeon" var c = null var d = "" var e = " ..

    [Android] registerForActivityResult로 팝업 Activity를 만들어보자

    들어가기 전 엄빠도 어렸다 서비스를 만들면서 두 사용자가 7일차까지 모두 답변을 마쳤을 때 홈화면 대신 엔딩화면이 팝업처럼 띄워지도록 구현해야했다. registerForActivityResult를 통해서 이 기능을 구현한 과정과 겪은 트러블슈팅을 포스팅해보도록 하겠다. registerForActivityResult 란? 기존의 Activity간의 이동을 할 때 startActivity(intent : Intent )를 통해서 단방향 이동을 하고, 데이터값 전달과 함께 양방향 이동을 위해서는 startActivityForResult(intent:Intent, requestCode:Int) 을 사용했다. 하지만 startActivityForeResult는 콜백 수행의 안정성, 보일러플레이트 코드의 증가 이슈..

    [Android] LifecycleOwner란? viewLifecycleOwner와의 비교

    들어가기 전 이번 포스팅에서는 ViewModel의 LiveData를 View에서 observe 할 때 사용하는 LifecycleOwner를 잘못 사용한 나의 사례를 바탕으로 LifecycleOwner란 무엇인지, viewLifecycleOwner와 비교해 fragment에서는 무엇을 사용해야하는지에 대해 알아보고자 한다. 안드로이드 프로젝트에서 mvvm 패턴을 구현할 때, model 에서 받아온 데이터를 가공해 view에 제공하기 위해서 viewModel을 활용한다. 이 때 AAC ViewModel에서 LiveData를 활용해 observerPattern을 이용할 것이다. 아래는 예시 코드이다. [그림 1]은 ViewModel에서 listQnaResponse라는 LiveData 객체를 생성하고, View..

    [Android] UI State란 무엇일까?

    들어가기 전 현재 나는 부모님과의 문답 서비스 엄빠도 어렸다 라는 프로젝트를 진행하고 있다. 프로젝트 진행 중 서버로부터 받아온 데이터가 UI에 나타날 때 빈 화면(데이터가 덜 표시된 화면)이 노출되는 경우가 종종 발생했다. 이 부분을 해결하고자 로딩뷰를 추가하기로 하였고, 공부하면서 로딩뷰를 어떻게 관리할까? 라는 의문이 생겼다. 그 과정에서 활용을 위해 UI State가 무엇인지에 관련된 글을 작성해보겠다. UI Layer UI의 역할은 화면에 애플리케이션 데이터를 표시하고 사용자의 상호작용의 기본 지점으로서의 역할을 수행하는 것이다. 상호작용 (Button 누르기) 또는 외부압력 (네트워크 응답)으로 인해 데이터가 변할 때 마다 변경사항이 반영하도록 UI가 업데이트 되어야 한다. https://hy..

    [Kotlin] 코틀린의 sealed class 란?

    Sealed class 정의 sealed calss는 Super 클래스를 상속 받는 Child 클래스의 종류를 제한하는 특성을 갖는 클래스이다. 어떤 Super 클래스를 상속받는 하위 클래스는 여러 파일에 존재하기 때문에 컴파일러는 해당 Super 클래스를 상속받는 하위 클래스가 얼마나 있는지 알지 못한다. 하지만 sealed class 는 동일한 패키지에 정의된 자신의 하위 클래스들을 인지해 컴파일러에서 그 외 다른 하위클래스는 존재하지 않음을 알 수 있다. 아래 예시를 통해 해당 상황을 보도록 하겠다. abstract class DogState class Running : DogState() class Eating : DogState() class Barking : DogState() 강아지의 상태를..

    [우테코/Kotlin] 우아한 테크코스 온보딩 풀이 및 공부

    들어가기 전 Kotlin 언어에 더 익숙해지기 위해서 요즘 우아한 테크코스 5기의 미션들을 하나씩 풀어가고 있다. 그 중 온보딩 미션의 풀이과정과 공부하면서 배운 내용들을 정리하고자 이 포스팅을 쓰게되었다. 문제1 : pobi 와 crong 각각 왼쪽,오른쪽 페이지 중 + / * 값이 더 큰 값을 구하고 이를 pobi와 crong의 대표값으로 설정한다. pobi와 crong 의 대표값 중 더 큰 값을 찾는 문제이다. 나의 풀이 fun getMaxNumber(page: Int): Int { var add = page var mul = page var resultAdd = 0 var resultMul = 1 while (add != 0) { resultAdd += (add % 10) add /= 10 } w..