본문 바로가기

분류 전체보기

(100)
[안드로이드] 코루틴 코루틴(Coroutine)코루틴은 Kotlin에서 지원하는 비동기 처리 기술이다. 코루틴은 멀티 스레딩 문제를 간소화 된 비동기 작업 방식으로 처리하기 위해 개발되었으며,스레드 내 Context switching 없이 여러 코루틴을 실행, 중단, 재개하는 상호작용을 통해 병행성(동시성)을 갖기에 스레드와 메모리 사용이 줄어들고 개발자가 직접 작업을 스케줄링 할 수 있도록 한다.suspend fun test(){ ... // 중단 suspendCoroutine{ continuation: Continuation -> continuation.resume(Unit) // 재개 } ...}/** * Interface representing a continuation after a suspension point ..
[안드로이드] 스레드 프로세스란? 프로세스는 실행 중인 프로그램, 안드로이드로 치면 App이 프로세스이다. App을 실행하면 안드로이드 OS의 메모리에 App이 올라가 실행된다. 스레드란? 프로세스 내에서 수행되는 작업들은 모두 스레드를 통해 이루어진다. 예를 들어, 계산기 어플이 프로세스라면 계산하는 작업은 스레드를 통해 실행된다. 안드로이드에서의 스레드 App을 실행하면 시스템은 메인 스레드를 만든다. 메인 스레드는 위젯, 뷰의 패키지에 있는 구성요소와 상호작용하는 스레드로, UI 스레드라고도 불린다. 화면에 XML을 출력해주거나, 버튼 클릭에 대한 이벤트 동작 등 모두 메인 스레드가 담당한다. 따라서, 시간이 긴 작업(네트워크, 데이터 쿼리 등)을 UI 스레드에서 진행하면 작업 시간동안 UI가 차단되며, UI 차단이 몇..
[안드로이드] 동기와 비동기 동기와 비동기 동기(Synchronous): 동기란 어떠한 순차적인 작업 A, B, C가 있을 때, A작업이 끝날 때까지 B와 C작업이 대기 즉, 한 번에 하나씩 작업을 처리하는 방식이다. 비동기(Asynchronous): 비동기란 A가 작업 중이여도 B와 C를 작업할 수 있는 상태, 즉, 자원을 효율적으로 사용하여 여러가지 작업을 진행할 수 있는 방식이다. 비동기 방식을 사용해야 하는 이유 사실 간단한 소규모 프로젝트에서는 비동기 방식을 사용하지 않아도 어떠한 문제가 없었을 것이다. 그러나 대규모, 플랫폼 단위로 넘어가면 다양한 작업들이 많아질 것이다. 예를 들어, 어떠한 네트워크 작업이 이루어지는데 이 작업이 생각보다 오래걸린다면 사용자는 이 네트워크 작업이 다 이루어질 때까지 해당 어플을 사용하지 ..
[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 양궁대회 with Kotlin 문제 라이언과 아파치가 양궁 결승 대회를 한다. 라이언이 챔피언 타이틀을 갖고 있기 때문에 룰은 아파치에게 유리한 쪽으로 적용되었다. 과녁의 점수는 0점부터 10점까지 있으며, 선수는 각 n개의 화살을 지급받는다. 과녁에 맞춘 화살의 개수로 중복 없이 둘 중 한명만 각 점수를 얻을 수 있다. 화살의 개수가 같을 경우 아파치의 점수로 인정된다. 예를 들어 10점 과녁에 아차피가 2발, 라이언이 2발 맞췄다면, 아차피가 10점을 획득한다. 이때, 아파치가 점수 별로 화살을 맞춘 과녁이 배열로 주어졌을 때, 라이언이 아파치를 상대로 가장 큰 격차를 내서 이길 수 있는 경우를 반환하면 된다. 조건 화살은 모두 소진해야 한다. 만약 이길 수 없고, 지거나 비기는 경우뿐이라면 [-1]을 반환한다. 점수 차가 같은 ..
[프로젝트] 정각에 해야지 - 알림 오류 프로젝트 명 : 정각에 해야지 목표 : 스케쥴과 하루 루틴을 입력하고, 루틴에 대해서는 해당 시간에 알림을 보내 규칙적인 생활을 하기 위함 첫번째 문제 테스트용으로 루틴을 1~2분 뒤로 맞춰놓고 테스트하면 정상적으로 실행 그러나 다음날이 되면 알림이 밀려 앱을 실행하면 울리거나 울리지 않는 오류 발생 찾아보니 debug모드가 아닌 release모드로 컴파일하는 것을 추천하여 keystore를 생성하여 release모드로 컴파일 하였다. 테스트 결과 1~2분, 30분까지도 정상적으로 작동하였고, 다음날 9시에 루틴을 설정해놓고 기다렸다. 9시 5분.. 기다려도 알림이 오지 않아 앱을 실행했더니 알림 발생 똑같은 시간 밀림 현상이 발생했다. 안드로이드 공식문서에 따르면 (3번째 문단) https://deve..
[Kotlin] 배열과 리스트 복사 코딩을 하다보면 배열 또는 리스트를 복사해야할 일이 생긴다. 기존의 배열은 그대로 두고 새로운 배열을 만들어 데이터 변경을 해야하기 때문이다. 복사에는 두 가지 복사가 있다. 1. 얕은 복사 2. 깊은 복사 얕은 복사 얕은 복사란 주소값이 복사된 것을 말한다. 쉽게 말하자면 변수명만 다르고 내용물은 같은 경우이다. val list = Array(3, {0}) // [0, 0, 0] val list2 = list 위와 같은 경우 list2의 값을 변경하면 list도 같이 변한다. val list = Array(3, {0}) // [0, 0, 0] val list2 = list list2[0] = 1 println(list[0]) // 1 이는 ArrayList, List 모두 같다. 우리가 알고 싶은건 깊..
[오류] Keystore file not set for signing config release 해당 오류는 keystore 경로 오류이다. 경로가 잘못되었을 때, 경로를 입력안했을 경우 해당 오류가 발생한다. 필자의 경우 release모드로 컴파일하기위해 keystore 생성 후 local.properties에 이와 관련된 정보들을 저장 후 사용하였는데 다음과 같이 입력하여 오류가 났다. local.properties storeFile = "keystore/release.keystore" 다음과 같이 사용할 경우 경로에 큰따옴표까지 포함되기 때문에 오류가 났던 것이다. 따라서 local.properties에서는 아래와 같이 사용해야 한다. storeFile = keystore/release.keystore 경로를 지정해주지 않았을 경우 경로를 지정해주지 않았을 경우에도 다음과 같은 오류가 발생한다..
[안드로이드] release 컴파일 안드로이드 컴파일에는 두 가지 종류가 있다. debug 와 release debug모드는 우리가 개발 시 흔히 사용하는 모드이며 테스트 모드라고 생각하면 편하다. release모드는 테스트가 끝나 배포할 상황에 사용하는 모드이다. 그렇다면 두가지의 차이점은 무엇일까? 차이점 대표적인 차이점으로는 debug모드는 실행파일에 디버깅정보를 포함시키기 때문에 용량이 커진다. 반대로 release모드는 디버깅 정보 없이 컴파일되어 실행파일로 만들어 진다. 또한 메모리 할당, 초기화도 모드 별로 다르다. (debug > release) 따라서 debug모드에서는 오류없이 정상적으로 실행되던 기능이 release모드에서는 오류가 발생하는 경우도 있다. release모드 사용 방법 release모드 사용에는 keyst..
[프로그래머스] 2023 KAKAO BLIND RECRUITMENT 이모티콘 할인행사 with Kotlin 문제 이모티콘 할인율: 10%, 20%, 30%, 40% 유저는 본인이 정한 할인율 이상일 경우에 무조건 이모티콘을 구매한다. 이 때, 구매한 이모티콘 가격이 유저가 정해놓은 가격 이상일 경우 >> 구매했던 이모티콘을 모두 취소하고 카카오 이모티콘 플러스를 구매한다. 이모티콘별로 할인율을 적절히 선택하여 최적의 결과를 도출하여라 결과 -> [이모티콘 플러스 가입 수 , 이모티콘 총 구매 가격] 우선순위는 1번이 이모티콘 플러스 가입 수, 2번이 이모티콘 총 구매 가격 users: [본인이 정한 할인율, 본인이 정한 가격] 입출력 예 users emoticons result [[40, 10000], [25, 10000]] [7000, 9000] [1, 5400] [[40, 2900], [23, 10000]..
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 후보키 with Kotlin 문제 위와 같이 2차원 배열로 DB가 주어졌을때, 후보키의 개수를 구하는 문제 후보키란? 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(uniqueness) : 릴레이션에 있는 모든 튜플에 대해 유일하게 식별되어야 한다. 최소성(minimality) : 유일성을 가진 키를 구성하는 속성(Attribute) 중 하나라도 제외하는 경우 유일성이 깨지는 것을 의미한다. 즉, 릴레이션의 모든 튜플을 유일하게 식별하는 데 꼭 필요한 속성들로만 구성되어야 한다. 즉, 각 행이 중복되지 않고 최소한의 속성만 갖고 있을 때 해당 속성들을 후..