전체 글 썸네일형 리스트형 Coroutine 3부 코루틴은 Dispatcher.Default와 같은 멀티 스레드 디스패쳐를 통해서 동시에 수행되도록 만들수 있다. 이러한 상황에서 주로 발생하는 문제는 동기화 이슈가 있으며 일반적인 멀티 스레드에서의 동기화 해결책들과 비슷하지만 코루틴 고유의 것들도 존재 (Actor) Volatile [공유객체] 하나의 객체를 여러 개의 쓰레드가 함께 사용하거나 공유한다는 것을 의미 ex) 놀이터에 그네가 하나 있고, 어린 아이들은 셋 있다. 이런 상황에서 그네를 [공유 객체], 아이들을 [Thread]라고 말할 수 있다. 클래스의 멤버변수는 heap 메모리에 존재하므로 스레드가 공유하여 접근할 수 있으며 이때 각 스레드는 속도향상을 위해 메인 메모리에 접근해서 값을 가져가는게 아닌, 캐시에서 변수값을 읽어가며 쓰기 또한.. 더보기 Coroutine 2부 Coroutine Cancel 일반적으로 job으로 연 코루틴은 cancel() 메소드를 통해 취소 가능 val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // delay a bit println("main: I'm tired of waiting!") job.cancel() // cancels the job job.join() // waits for job's completion println("main: Now I can quit.") // reulst job: I'm sleeping 0 ... job: I'm sleeping 1 ... job: I'm sleeping.. 더보기 Coroutine 1부 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴 코루틴은 Kotlin만의 고유한 개념이 아니며 다른 언어에서도 지원하고 있다. Co: 함께 routine : 규칙적으로 하는 일의 통상적인 순서나 방법, 일반적으로 빈번히 사용할 수 있는 프로그램 또는 그 일부 장점 경량 : 코루틴은 실행 중인 스레드를 차단하지 않는 정지를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있다. 메모리 누수 감소 : 구조화된 동시 실행을 사용하여 범위 내에서 작업을 실행 취소 지원 : 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달 일반적인 서브 루틴 fun main() { val addValue = plusOne(value) } fun plusONe.. 더보기 MVVM 디자인 패턴중 하나 디자인 패턴이란 개발 과정에서 공통으로 발생하는 문제를 해결하기 위해 사용되는 패턴 디자인 패턴을 사용해야 하는 이유 수정에 열려있는 구조로 유지보수에 들어가는 비용이 줄어듬 언어에 제약을 받지 않고 사용 가능 MVVM 패턴은 마틴 파울러의 Presentation 모델 패턴에서 파생된 디자인 패턴 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 것이 목적 테스트, 유지 보수, 재사용이 쉬워진다는 장점 View는 ViewModel을 알지만, ViewModel은 View를 알지 못한다. ViewModel은 Model을 알지만, Model은 ViewModel을 알지 못한다. 이런 구조를 통해 ViewModel과 Model이 View로부터 독립적인 형태를 만들어 UI로부터 비즈니스 로.. 더보기 Repository Pattern 정의 : 데이터 출처(로컬DB, 서버 API 응답)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 하는 디자인 패턴 발생배경 비즈니스 로직은 프로그램의 핵심이 되는 요소이며 보통 데이터베이스나 웹서비스 등의 데이터 저장소에 접근하게 되는데 이 과정에서 여러 문제가 발생(중복코드, 오류 발생 가능성의 코드, 오타, 유닛 테스트 어려움) 함에 따라 몇가지 요구사항이 발생 비즈니스 로직과 데이터 레이어를 분리 중앙 집중 처리 방식을 통해 일관된 데이터와 로직을 제공해야 함 특징 데이터가 있는 여러 저장소를 추상화하여 중앙 집중 처리 방식을 구현 데이터를 사용하는 도메인에서는 비즈니스 로직에만 집중할 수 있음 ex) ViewModel에서는 데이터가 로컬 DB에서 오는지, 서버 API 응답값에서 오는지.. 더보기 Android Custom Progress Dialog 안드로이드 오레오(8.0)에서 프로그래스 다이얼로그가 Deprecated 되었다. 이유인 즉슨 ProgressDialog가 모달 대화상자기 때문에 사용자와의 상호작용성을 떨어트리기 때문이라고 한다. 잘 써먹던 건데 이래되버리니 그냥 내가 만들어서 라이브러리로 만들어 놓고 써야겠다 싶어서 만들고 공유한다. https://github.com/welcome2c/LottieProgressDialo welcome2c/LottieProgressDialog Custom Dialog. Contribute to welcome2c/LottieProgressDialog development by creating an account on GitHub. github.com - Top level build.gradle 에 추가 .. 더보기 타겟 넘버 문제 설명 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 1000 이하인 자연수입니다. .. 더보기 2 x n 타일링도움말 문제 설명 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다. 타일을 가로로 배치 하는 경우 타일을 세로로 배치 하는 경우 예를들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다. 직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요. 제한사항 가로의 길이 n은 60,000이하의 자연수 입니다. 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요. 입출력 예 nresult 4 5 입.. 더보기 이전 1 2 3 4 ··· 6 다음