전체 글 231

제목을 뭐라고 해야할까.

간만에 쓰는 블로그의 글이 잡담인게 스스로 유감이다. 이것저것 정리하고 쓸것도 많은데 손에 잡히지 않는다. 그렇다고 공부하는걸 그만둔것도 일에 권태를 느낀것도 아니다. 그냥 내 마음의 문제다. 열정과 의지의 문제도 아니고 그냥 마음이 많이 지쳐서 조금 속도를 늦추고 날 보살피고 싶은거 같다. 가슴이 머리를 앞서가면 항상 이런일이 생긴다. 내가 간절하게 바란것과 현실의 괴리를 알았을때 그 간격의 크기만큼 나를 보살필 시간이 필요하다. 그리고 그 간격이 도저히 나만의 의지로는 좁혀지지 못하겠다고 생각이 들었을때는 더욱 더 그렇다. 노력으로만 되지 않는 일도 얼마든지 많으니까 그리고 그런 일의 대부분은 시간이 지나며 덤덤해지는게 대부분이니까. 괜찮아지겠지 이런건 계속 겪어왔고 앞으로도 겪게 되겠지 그러니까 그..

잡담 2022.05.01

InverseBindingAdapter 에 대해

이전 포스팅에서는 BindingAdapter에 대해서 알아봤다. InverseBindingAdapter 에 대해 언급을 했었는데 이번엔 InverseBindingAdapter 에 대해 집중해서 포스팅한다. InverseBindingAdapter 은 양방향 데이터 결합을 지원한다. 갑자기 이게 뭔소린가 싶다면 기존의 BindingAdapter 와 차이가 뭔지를 봐보자. 기존의 Binding 은 Model To View InverseBinding 은 View To Model 이다. 그러나 InverseBinding 은 Binding의 역할도 포함하고 있기에 양방향이라고 볼 수 있다. 쉽게 말하면 Binding 은 Model 있는 값을 View 로 보내주기만 한다면 InverseBinding 은 view에서 ..

Android 2022.03.28

BindingAdapter에 대해서

Databinding 관련 작업을 하다보면 BindingAdapter에 대해서 자주 보게 된다. 오늘은 BindingAdapter를 작업 할 일이 있었는데 생각이 난김에 정리를 해보려고 한다. 먼저 BindingAdapter는 뭐고 왜 쓰는걸까? BindingAdapter 는 view 의 속성을 커스텀하게 추가시킬 수 있는 것이다. 일단 잡다하게 BindingAdapter 을 적용하기 위해서 필요한 선작업들은 알고 있다는 상황으로 가정하고 적겠다. 먼저 viewmodel 부터 보자. @HiltViewModel class FeedViewModel @Inject constructor (private val feedUsecase: FeedReposUseCase): ViewModel() { private val..

Android 2022.03.27

코루틴의 job 과 Deferred 의 차이

코투린의 비동기 실행을 하다보면 코루틴을 시작할때 launch 를 사용하거나 async 를 사용하거나 하는데 동작은 비슷하게 하지만 둘의 차이가 있다. launch - 새로운 코루틴을 시작한다. 결과값을 전달하지 않을 때 사용한다. async - 결과를 리턴할 수 있는 코루틴을 시작할때만 사용한다. 둘의 차이는 리턴값이 있냐 없냐의 차이다. 뭘 사용하는가에 따라 메소드나 완료 대기에 대한 대응이 달라진다. 이 이야기를 한건 launch 을 사용하면 job 을 반환하고 async 를 사용하면 Deferred 를 반환하기 때문이다. 그럼 다시 제목의 내용으로 돌아와서 job 과 Deferred 에 대해 알아보자. 사실은 job 과 Deferred 는 비슷하다. 그도 그럴게 Deferred 는 job을 확장하..

Android/Coroutine 2022.03.26

프로그래머스 - 신고 결과 받기

https://programmers.co.kr/learn/courses/30/lessons/92334?language=java 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr import java.util.*; class Solution { public int[] solution(String[] id_list, String[] report, int k) { //한 사람이 여러번 똑같은 사람을 신고하는건 의미가 없으므로 distinct로 중복을 다 제거한다. report = Arrays.stream(re..

알고리즘 2022.03.21

코루틴의 suspend 에 대해서

코루틴은 일시중단 일단 일시중단이 가능하다. launch 든 async 든 내부에 일시중단을 하는 동작이 있다면 코루틴은 잠시 멈춘다. 코루틴은 일을 협력(?) 한다는 느낌을 내포하고 있는데 여러개의 코루틴이 존재 할 수 있고 어떤 스레드에서 동작할지 명시 해준다면 각각의 코루틴을 잠시 멈췄다가 다른 코루틴을 실행시키고 그리고 일이 마무리되면 다른 코루틴과 같이 결과를 전달하거나 서로 순서를 옮겨다니며 동작한다. 예를 들면 val job3 = CoroutineScope(Dispahchers.IO).async{ //2. IO 스레드에서 작업3을 수행 (1..100).sortedByDescending{it} //5. 작업3이 완료된다. } val job1 = CoroutineScope(Dispahchers...

Android/Coroutine 2022.03.15

lateinit 과 lazy의 차이점

lateinit과 lazy 는 늦은 초기화를 하게 해주는 키워드다. 늦은 초기화가 뭘까? 늦은 초기화는 선언과 동시에 값을 가져오기 곤란한 상황에 뒤에 이 변수를 초기화 해줄 수 있는 시점이 됐을 때 초기화를 하도록 미뤄주는 역할을 한다. 생각보다 쓸 일이 자주 생기는데 두가지 방법에는 차이가 있다. 먼저 lazy 에 대한 이야기다. 오늘 업무를 진행하다가 Dialog 와 관련된 작업을 할 일이 있었다. 순간 고민이 생겼는데 Dialog를 생성할때 중복되는 내용들을 baseDialog 로 만들어서 부모 클래스로 만들어뒀는데 여기서 높이와 넓이를 부모클래스에서 값을 받도록 하고 있어서 작업하려던 Dialog 에서 override 하고 있는 곳에 값을 넣어 줄 상황이 생겼다. 고정 값으로 값을 집어넣어주면 ..

Kotlin 2022.03.15

내가 좋아하고 원하는 일을 계속 할 수 있기를.

어릴적부터 꿈은 계속 변하고 어느덧 윤곽을 그리기 시작한 꿈은 동료들과 내가 개발하는 서비스를 사용하는 이용자들에게 도움이 되고 즐거움을 줄 수 있는 개발자가 되는 것이 됐다. 아직은 많이 부족하다고 느끼지만 부족한건 아직 내가 할 수 있는게 많다는 것일테고 그러면서도 꾸준히 발전하는 나를 스스로 자랑스러워 할 날들이 온다는 뜻일테다. 모르는 것을 부끄러워 하지 않으며 불만을 듣거나 혼나는 일이 생기더라도 주눅들지 않으며 고통과 인내를 나의 양분으로 끌어모아 마음이 앞으로도 꺽이지 않길 바라며 오늘도 내가 할 수 있는 일을 하자. 나는 똑똑하지도 특별하지도 않은 것을 잘 알고있다. 그러고 싶지 않다면 거짓말일테지만 어떻게든 해내고 싶다. 결국은 해낼테다. 라는 의지만큼은 자부 할 수 있다. 그리고 이런 ..

잡담 2022.03.11

안드로이드 코루틴 flow의 StateFlow 와 SharedFlow

둘다 비슷하게 쓰인다. 마치 LiveData 와 비슷한 점이 많은데 분명 써보면 차이점은 있다. 난 이 차이점에 대해서 명확하게 설명하지 못했던 사람이고 이 글은 그걸 설명해보려고 적는 글이다. 둘다 데이터 스트림에서 hot 흐름을 가지는데 hot흐름 cold 흐름에 대해서는 코루틴은 아니지만 Rx 를 다루면서 말했었으니 아래 링크를 참고하길 바란다. https://choi-dev.tistory.com/138 RxJava - Hot Observable , Cold Observable 이전에 쓴 글(아래 링크 참고) 에서 뒷쪽에 https://choi-dev.tistory.com/107?category=972011 RxJava - Observable을 제외한 다른 생산자들 전 포스팅에서는 Observabl..

Android/Coroutine 2022.03.05

Dev6 개발팀

짜잔. 또 이것저것 만드는 병(?) 을 못고치고 팀을 만들었다. 물론 만들어진건 두달 정도 됐다. 안드로이드 2명, 백엔드 1명 , IOS 1명 , 웹 1명 , UI/UX 디자이너 2명으로 이루어졌다. Dev6는 공고에도 적어둔것처럼 파괴적 , 진취적 , 창의적인 서비스를 개발하려는 팀이다. 딱히 어떤것을 만들기 위해 목표를 세우고 만들어진 팀이 아니라 누구의 아이디어든 모두가 즐겁고 해보고 싶다고 느끼면 빠르게 움직여서 프로젝트를 만드는 지속적인 팀이다. 지금은 회의를 거쳐 첫번째 프로젝트를 선정하고 각자의 위치에서 열심히 노력하고 있다. 직장생활과 병행하시는분들이 대부분인데도 자신의 역할을 묵묵히 수행해주는 팀원들에게 매우 감사하게 생각하고 있다. 자신의 분야를 사랑하는 사람들이 모여서 으쌰으쌰하는 ..

Dev6 2022.03.05