전체 글

· 학습
안녕하세요 오랜만입니다. 바빠서 간만에 돌아왔습니다. 오늘도 뜬금없이 새로운 주제로 찾아왔습니다. “대용량 파일 다운로드를 구현하려면 어떻게 해야 할까?” 얼마 전 친구가 던진 질문입니다.특정 OS나 프레임워크에 국한된 질문이었다면 구글링을 통해 바로 해결했겠지만그렇지 않았기에 질문의 의도를 곰곰이 생각해 보았습니다. 어떤 상황에서도 적용될 수 있는 공통적인 해결책을 요구한다고 생각했고, CS 지식에 기반한 해결책을 고민해 보았습니다.고민해 보면서 질문이 꽤 재밌다고 느껴 직접 구현해 보았습니다.참고로 안드로이드에선 DownloadManager를 사용하면 쉽게 구현할 수 있습니다 추가로 notebook lm이라는 재밌는 기능이 생겼길래 만들어봤습니다. 이번 글로 만든 AI 팟캐스트입니다. 대용량 파일 ..
· 학습
얼마전 키 순서라는 문제를 풀었습니다. 이 문제를 풀며 발견한 자바의 BitSet 클래스에 대한 이야기를 해보려고 합니다.이 문제에 관심이 없으신 분들은 바로 비트마스킹 목차로 이동해주시면 되겠습니다.관심이 있는 분들은 한 번 풀어보고 보시면 좋을 것 같습니다. 키 순서문제를 간단히 설명하면 다음과 같습니다.최대 N=500까지의 노드(학생)가 있을 때, 키 비교 결과를 가지고 각 학생의 ‘키 순서’를 정확히 알 수 있는 학생의 수를 구하는 문제.이 문제는 플로이드 워셜로 분류되어 있으며 대부분의 블로그들은 이를 플로이드 워셜로 풀이하고 있습니다. 그러나 저는 플로이드 워셜에 익숙치 않아 DFS를 먼저 떠올렸습니다. DFS로 각 노드에 대해 후손(자신보다 키가 작은 노드들의 집합)과 조상(자기보다 키가 큰..
요즘 너무 바빠서 이번에도 가벼운 주제로 가져와 봤습니다.사실 SOLID의 O를 이어가는 게 가장 이상적이었겠지만, 시간이 부족한 관계로…한 달 전쯤같이 공부하는 친구가 Comparable과 Comparator가 어렵고 헷갈린다고 하여 설명해 주었습니다.그 뒤로도 주변에서 코딩테스트 언어를 선택할 때 “자바 뭐 Comparator…? 그거 복잡하잖아”와 같은 말들을 듣게 되었습니다.그래서 Comparable과 Comparator가 어렵지 않다는 주제로 블로그 작성을 기획하게 되었습니다.  언제 필요한데?자바는 Arrays.sort()나 Collections.sort()같은 정렬 기능을 제공합니다. 그래서 우리는 다음처럼 int 배열과 Integer 리스트를 정렬할 수 있습니다.// 편의상 원소 삽입 및 ..
이번 편은 조금 쉬어가고자(?) 조금 익숙한 주제를 골라봤습니다. 바로 SOLID입니다! 엥, 갑자기 무슨 SOLID냐? 너무 기본 아니냐? 라고 하실 수 있습니다.아무래도 이전 글들에 비하면 주제가 몇 년 전으로 돌아간 느낌입니다.그래도 막 들어온 따끈따끈한 우테코 7기 친구들도 있고, 학교에서 이제 객체지향을 배우는 친구들도 어딘가에 있을 테니까요? 이전에 SOPT에서 SOLID를 주제로 세미나를 하기도 해서 금방 적을 수 있을 거로 생각했습니다. 그런데 알고 있는 것과 별개로 간만에 이야기 하려니 생각보다 오래 걸리네요.예시도 바로 안 떠오르고.. 어쩌면 잊고 살았는지도 모르겠습니다. SOLID라는 단어를 들으면 각자의 세대에 따라 다른 단어를 떠올릴 것입니다.누군가는 가수를, 누군가는 카트라이더를..
· 학습
mutableStateOf우리는 지난번 글에서 State와 MutableState를 살펴보았고, 그 과정에서 RecomposeScope와 리컴포지션 과정에 대해 알아보았다.글이 길어져서 다루지 못했지만, 나는 사실 한 가지가 더 궁금했다. State(MutableState) 인스턴스를 생성할 때 우리는 mutableStateOf 함수를 사용한다. mutableState는 무엇을 어떻게 생성해서 뱉어내는가? 이제부터 그것을 알아보려고 한다. mutableStateOf 함수는 다음과 같이 생겼다.@StateFactoryMarkerfun mutableStateOf( value: T, policy: SnapshotMutationPolicy = structuralEqualityPolicy()): Mu..
· 학습
서론(서론은 공식문서에서 발췌한 내용이 대부분이다. 이미 알고 있다면 패스해도 좋다)이번 주제는 Jetpack Compose의 State와 MutableState이다. 지난 번에 작성했던 RecyclerView 글에 대한 후속편도 적어야 하는데, 시간이 부족하다..얼른 시간 내서 작성해보도록 하겠다. 이제는 역사가 유구한 프로젝트가 아니라면 대부분 컴포즈를 사용할 것이다. 그럼 다들 좋다고 사용하는 컴포즈는 어떻게 다를까?컴포즈 이전에 우리는 명령형 UI 형태로 뷰 객체의 프로퍼티를 수정하거나, 메서드를 호출해서 화면을 업데이트 했다.binding.tv.text = "안녕하세요"binding.tv.textSize = dpToPx(context, 14)binding.tv.updatePadding(top =..
· 학습
서론저번 회고 글에서 말했듯 블로그 챌린지를 시작했다. 이번 회차엔 모두 같은 주제로 글을 쓴다.그 주제는 바로 리사이클러뷰다.컴포즈가 만연해진 시대에 (컴포즈를 사용하지 않는 역사가 긴 앱을 제외하면) 리사이클러뷰는 이제 잘 사용되지 않는다.컴포즈로 안드로이드 개발을 처음 시작하는 사람이 늘어나면서 리사이클러뷰를 모르는 경우도 더러 있다고 들었다. 사실 컴포즈만 사용한다면 굳이 알 필요는 없다.그러나 만약 당신이 들어간 회사가 여전히 xml을 사용하고 있다면, 리사이클러뷰 사용을 피할 수 없을 것이다. 그만큼 리사이클러뷰는 앱을 만들 때 많이 사용되는 컴포넌트이다. (컴포즈 사용자라면 생각해 보자, LazyRow, Column, Grid 없이 앱을 만들 수 있겠는가?)리사이클러뷰는 역사가 긴 만큼 자료..
· 회고
최근 동력을 잃어 아무것도 하지 않고 어영부영 시간을 보내고 있었다. 그러던 와중 블로그 챌린지 모집 글을 보고 동력을 되찾기 위해 신청했다. 원래 주제는 2024년 회고지만, 창업 회고가 곁들여지면서 2023 하반기까지 포함되게 되었다.  창업 그리고 퇴사올해 나에게 가장 큰 사건이지 않을까 싶다. 작년(2023년) 9월부터 쭉이라는 팀으로 창업을 시작했다. (이제는 회사가 되었지만)종종 친구들이 왜 취업하지 않고 창업을 하냐고 물었다. (물론 취업이 하고 싶다고 되는 건 아니지만...) 원래 내 인생 계획은 2024년에 취업을 하고 30대 중반까지 돈과 경험을 쌓아 창업하는 것이었다. 그런데 효재(쭉의 대표)를 만나면서 내가 10년 뒤로 계획했던 창업의 기회가 운 좋게 일찍 찾아왔다고 생각했다. 성공..
인터루드
빅스의 인덱스