💻 프로그래밍 12

[Git , SourceTree] GitHub 토큰 발급하기 , cherrypick

버전관리를 위해 사용하는 Git Git의 GUI 프로그램으로는 SourceTree를 썼다 하지만 나는 여러명이서 소스코드를 같이 관리해본 경험이 없기때문에 배워야할게 많다.. 토큰 발급받기 2021년 하반기 이후로는 토큰을 반드시 사용하도록 변경되었다 Github - 프로필 - settings 선택 Developer Settings 선택 developer settings -> generate new Token (classic) 선택 만료일은 필요한 만큼 정하고 , scope는 전체를 체크했다 ⭐️ 토큰 생성 후 꼭 꼭 꼭 저장해두기 CherryPick 원하는 커밋만 가져오고 싶을 때 예를 들어, feat/a에서 2개를 커밋한 후 첫번째 커밋만 가져오고 싶을 때 1. feat/a 생성 후 2개 커밋 2. ..

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

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

[RxJava] #2 Subject

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