👩🏻‍💻 Develop 142

[🔥 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

[Android] Custom Rating Bar

RatingBar SeekBar, ProgressBar의 확장으로 별점을 표시할 때 쓰이는 View입니다 터치 혹은 드래그로 별점을 정할 수 있습니다 아래사진처럼요! RatingBar의 자주 쓰이는 속성 android:isIndicator - RatingBar의 조절 여부 (true : 사용자가 조절 불가 , false: 사용자가 조절 가능) android:numStars - 별의 개수를 지정 (ex: android:numStars="5") - numStar 지정 시, RatingBar의 layout_width = "wrap_content"로 해야 지정한 개수가 제대로 보입니다 android:rating - 디폴트 별점 지정 (ex. android:rating="3") android:stepSize - ..

📱 Android 2022.08.04

[RxJava] #2 Subject

지난 포스팅에 이어서 RxJava의 Subject에 대해 알아보겠습니다 💡 Subject • 구독자, 생성자의 특징을 둘 다 가짐 (여러개의 Observable을 구독할 수 있고, 데이터를 방출할 수 있다) • Cold Observable을 Hot Observable로 변경 🔥 Hot Observable 데이터 구독 여부와 관계 없이 데이터를 배출 ❄️ Cold Observable 데이터를 구독을 시작해야 데이터가 배출 Subject의 종류 📍 AsyncSubject • 해당 Observable이 완료된 후 마지막 데이터만 발행합니다 • 에러가 발생한다면 어떠한 데이터도 발행하지 않고, 에러만 발행합니다 val subject: AsyncSubject = AsyncSubject.create() subjec..

[RxJava] #1

안녕하세요 오늘은 비동기 프로그래밍 중 하나인 RxJava에 대해 알아보겠습니다 API와 통신할 때만 사용했기에, 더 많은 기능을 알고자 정리해보겠습니당 우선, 명령형 프로그래밍과 반응형 프로그래밍에 대해 간략히 알아볼게요 RxJava는 반응형 프로그래밍을 따릅니다 📌 명령형 프로그래밍 - 선언된 명령어를 순차적으로 실행 📌 반응형 프로그래밍 - 데이터의 변화에 반응해 실행 (비동기 스트림으로 처리) 키워드에 포커스를 맞추고자 하다보니 문장이 좀 어색하네요 😅 RxJava Rx는 ObserverPattern을 따릅니다 아래의 포스팅을 확인해주세요 ✅ 2022.07.21 - [💻 프로그래밍] - [디자인 패턴] Observer Pattern(관찰자 패턴) [디자인 패턴] Observer Pattern(관찰..