전체 글 145

[🔥 Coroutine] #5 또 예제로 복습하기 (async, launch)

✏️ 예제를 통한 복습 suspend fun getRandNum1() : Int { delay(1000L) return Random.nextInt(0,500) } suspend fun getRandNum2() : Int { delay(1000L) return Random.nextInt(0,500) } fun main() = runBlocking { val time = measureTimeMills{ val one = getRandNum1() val two = getRandNum2() println("${one} + ${two} = ${one + two}") } println(time) } 순차적으로 실행되어 1000L + 1000L = 2초가 걸림 개별적으로 실행되지만, 순차적으로 실행되어서 항상 get..

[🔥Coroutine] #4 suspend, Job 간단하게 살펴보기

시작 전 복습 한 마디 코루틴이 쓰이는 모든 곳에는 CoroutineScope가 있습니다 CoroutineScope는 CoroutineContext(코루틴을 처리하기위한 정보)를 가지고 있습니다 suspend 코루틴 내에서만 함수를 호출하지 않고, 코드의 일부를 함수로 분리하려면 suspend 키워드를 사용 suspend가 붙은 함수를 사용하려면 1. 그 함수가 suspend이거나 2. CoroutineBuilder를 통해 코루틴을 만들어야한다 suspend fun showName(){ println("showName") delay(500L) println("My name is Kong") } suspend fun showAge(){ println("showAge") delay(1000L) println..

[🔥 Coroutine] #3 예제로 복습하기

안녕하세요 :) 오늘은 예제로 여태까지 1,2장에서 공부한 코루틴에 대해 복습하고자 합니당 다음 포스팅은 Job으로 돌아오겠습니다 🙇🏻‍♀️ CoroutineBuilder 코루틴을 생성하는 함수 1. runBlocking runBlocking내의 코드블록이 수행될 때까지 다른 코드가 수행되지 못하게 Block runBlocking내의 this는 코루틴이 Receiver임을 알 수 있음 Active : 현재 코루틴의 활성화 상태 2. launch 💡 runBlocking과의 차이 : runBlocking은 코드블럭 수행완료까지 다른 블록을 수행하지 못하게 Block, launch는 다른 코드를 함께 수행하게 함 (코드를 큐에 넣어두고 다음 순서를 기다림) ⭐️ 하지만, runBlocking으로 코루틴을 만..

[🔥 Coroutine] #2 runBlocking , async

안녕하세요 아주 오랜만입니다 약간의 휴식기를 갖고 왔습니다 :) CoroutineBuilder에 관해선, 이전 포스팅에도 있기 때문에, 간단한 예제를 통해 복습하겠습니다 간단한 예제지만, 코루틴을 처음 접하기 때문에 쉬운 예제부터 시작해 천천히 개념을 명확히 알아보려합니다 🙇🏻‍♀️ 2022.08.30 - [💻 프로그래밍] - [🔥Coroutine] # 1 Coroutine을 배워봅시다 1. runBlocking runBlocking 내의 코드가 완료되기 전까지 mainThread를 종료시키지 않음 -> 동시성이 깨짐 다른 코루틴의 Thread를 중지할 수도 있기 때문에 주로 테스트코드 작성시에 많이 쓰임 테스트 코드를 살펴보겠습니다 @Test fun testRunBlock() = runBlocking ..

[Algorithm] 대칭수 확인하기

대칭수를 확인해보는 알고리즘 가운데 숫자를 기준으로 서로 대칭하는 숫자인지 확인 예를 들어, 121 => True 1221 => True -121 => 121- False 입력받는 값 : n 생각한 과정 1. 문자열로 변경 2. 문자열로 변경한 뒤 중간을 기준으로 substring 3. 앞 배열 , 뒤 배열을 만든 뒤 뒤의 배열을 reverse해서 비교 놓친 과정 1. 가운데 기준으로 같다면 substring을 거치지 않아도 됨 2. 문자열 자체를 하나의 배열로 생각해서 reverse 시켰을 때가 같으면 대칭수 3. 배열 자체를 비교하지 말고, contentEquals를 사용해 내용 자체를 비교 다시 생각한 과정 1. 음수가 되면 -가 붙어서 대칭이 될 수 없으므로 양수인 경우만 로직을 타게 2. 우선 ..

[🔥Coroutine] # 1 Coroutine을 배워봅시다

안녕하세요:) 원래 비동기처리는 RxJava를 사용하고 있었는데, Coroutine은 사용해본적이 없어서 배워볼까 합니다 🧐 왜 Coroutine을 공부하는가? 안드로이드 메인스레드는 1개로 UI를 업데이트 하기 위해 사용되고, 별도로 멈추는 작업이 없다면 16ms마다 UI를 업데이트를 합니다 그런데 만약 이 때 시간이 걸리는 DB 작업, 네트워크 작업을 하게 된다면 크래시가 발생하기 쉽습니다 그럼 이런 의문이 생기죠 메인 스레드를 멈추고 작업을 하면 되는거 아냐? 🤷‍♀️ 하지만, main Thread를 너무 오래 멈추게 되면 ANR이 발생합니다 main Thread를 크래시 없이 사용하기 위해선, UI 이외의 작업은 별도의 스레드에서 해야합니다 보통 콜백을 통해서 이런 위험성을 피했는데, 콜백은 '콜..

[RxJava] #5 Operators(3) 필터링, 결합 연산자

안녕하세요 Observable에서 발행되는 아이템들을 필터링 및 결합하는 연산자에 대해 알아보겠습니다 필터링 연산자 💡 debounce • 아이템이 발행되고 🕒 동안 다른 아이템이 발행되지 않을 때, 마지막 아이템을 발행 💡 throttleFirst • 일정 시간마다 첫번째 이벤트만 가져옴 • 첫번째 이벤트를 가져오고 나면 🕒 내의 다른이벤트는 무시 💡 throttleLast / sample • 일정 시간마다 가장 최근 이벤트만 가져옴 📌 debounce, throttleFirst, throttleLast는 UI 컨트롤에 유용 ex)브랜디 랩스 (유효성 검사) 안드로이드 이벤트 핸들링 적용하기 Overview labs.brandi.co.kr 💡 elementAt • 특정 인덱스에 해당하는 아이템을 필터링..

[RxJava] #4 Operators(2) 변형연산자

2022.08.03 - [💻 프로그래밍] - [RxJava] #3 Operators(1) [RxJava] #3 Operators(1) 2022.08.01 - [💻 프로그래밍] - [RxJava] #1 [RxJava] #1 안녕하세요 오늘은 비동기 프로그래밍 중 하나인 RxJava에 대해 알아보겠습니다 API와 통신할 때만 사용했기에, 더 많은 기능을 알고자 정리해보겠 kong-droid.com 이전 포스팅에서는 Observable을 생성하는 Operator에 대해 알아봤습니다 오늘은 Observable을 변형하는 연산자에 대해 알아보겠습니다 🧐 예시 코드는 rxjava3:rxjava:3.0.7 기준입니다 변형 연산자 💡 map • 변형 연산자 중 가장 기본적이고 많이 쓰이는 연산자 val origin ..

[RxJava] #3 Operators(1) 생성연산자

2022.08.01 - [💻 프로그래밍] - [RxJava] #1 [RxJava] #1 안녕하세요 오늘은 비동기 프로그래밍 중 하나인 RxJava에 대해 알아보겠습니다 API와 통신할 때만 사용했기에, 더 많은 기능을 알고자 정리해보겠습니당 우선, 명령형 프로그래밍과 반응형 프로 kong-droid.com 위 글에서 Operator는 공식문서 참조로 끝났지만, Operator를 실습해야 RxJava를 편하게 쓸 수 있을 거 같아 포스팅을 쓰고자 합니다 🧐 생성 연산자 Observable 생성 시 자주 쓰이는 연산자들에 대해 알아보겠습니다 Just • 인자 그대로 발행(어떤 변화 없이 그대로 발행), 인자 여러 개 선언 시 타입은 같아야 함 (최대 10개) • onNext, onComplete, onErr..

[Android] Custom Spinner

안녕하세요 오늘은 spinner에 대해 사용해보겠습니다 보통, 문자 인증 시 통신사 선택할 때 자주 사용되는데 저는 DatePicker 대신 년도+월을 선택할 수 있는 Spinner를 만들고자 합니다 (화면에 날짜를 선택하는 영역을 최대한 줄이고 싶어서요) Spinner 드롭다운의 형태로 여러 개의 데이터 중 하나의 데이터를 선택할 수 있는 View입니다 자주 접하는 모양의 View일 거에요, 문자 인증 시 통신사를 선택하거나 이메일 주소를 선택할 때 등등 기본 형태는 위와 같지만, 저는 배경도 바꾸고 싶고 icon도 변경하고 싶어서 Custom을 하겠습니다 🚀 Spinner 사용하기 1. xml에 Spinner 선언 2. Activity or Fragment에 SpinnerAdapter 연결 Spinn..

📱 Android 2022.08.09