-
안드로이드에서 섹션 구조로 유연한 앱 만들기
앱의 전시 영역을 섹션 구조로 변경하여 유연하게 만든 경험에 대해 기술하고자 합니다. 간단하게 섹션 구조에 대해 소개하고, 안드로이드에서는 어떻게 구현했는지 소개하겠습니다. 섹션 구조 사실 섹션이라는 용어가 업계에서 통상적으로 사용되는 용어인지는 모르겠지만, 아마도 자주 봤던 구성일 것입니다. 헤더 영역 주로 섹션을 설명하... Read More
-
안드로이드 태극기 커스텀 뷰
2023년 8월 15일은 제 78주년 광복절이다. 광복절을 맞아 태극기를 안드로이드 커스텀뷰로 작성해보았다. 덤으로 한글을 사용한 코딩을 해보았다. 태극기 태극기는 대한민국의 국기이며 가운데 태극문양과 네모서리의 건곤감리 4괘로 구성된다. 각각의 의미는 다음을 읽어보면 좋을 것 같다. 태극기 도안 태극기 도안은 행정안전부 사이... Read More
-
Kotlin subList vs slice
subList kotlin.collections.List 에 정의된 함수이다. Returns a view of the portion of this list between the specified fromIndex (inclusive) and toIndex (exclusive). The returned list is backe... Read More
-
SavedStateHandle과 커스텀 SaveableStateFlow
ViewModel은 화면 회전 같은 Configuration change 상황에서 사용할 수 있지만, 시스템에 의해 프로세스가 종료되는 상황을 대응할 때는 SavedStateHandle을 사용할 수 있다. SavedStateHandle은 ViewModel 객체에서 생성자로 받을 수 있으며, 키-값 맵 형태로 상... Read More
-
Android Compose - Coil 로 불러온 이미지의 비율 알아내기
비율 계산 코드 : 이동 문제 상황 이미지를 클릭하면 다이얼로그로 크롭되지 않은 원본 비율의 사진을 보여줘야 한다. 하지만 이미지가 불러와지기 전에 화면을 가득 채우는 현상이 있었다. (그 와중에 태극기는 바로 불러와지는 ㅋㅋ 🇰🇷 펄럭) 문제 상황 Dialog(onDismissRequest = { }) ... Read More
-
Android throttle click with Flow and without Flow
Throttle 이란? 안드로이드와 같은 UI 기반 프레임워크는 클릭과 같은 사용자 이벤트를 다룰 일이 많다. Throttle이란 일정 시간 내에 들어온 이벤트 중 하나의 이벤트만 처리하는 기술이다. 이 이벤트는 Flow나 RxJava와 같은 Stream에서는 계속 반복되어 결국 일정한 주기로 이벤트를 처리하게 되... Read More
-
Android RecyclerView 클릭 이벤트 처리는 어디서 해야할까
⭐ 리사이클러뷰를 사용할 때 클릭 이벤트를 어디서 어떻게 처리하는 것이 좋을 지 알아보자 간단한 예제 만들기 메뉴를 선택하고 주문하기 버튼을 누르면 토스트 메시지로 주문 내용을 띄워주는 간단한 예제를 만들어보았다. 간단한 예제이기 때문에 다음 내용들은 크게 고려하지 않았다. 실제 프로젝트... Read More
-
Kotlin Array, List, Data Class destructuring and ComponentN max count
Destructuring (구조 분해) 공식 문서 코틀린에서 리스트나 배열, Data Class 등의 값을 각각 변수에 담고 싶을 때 구조 분해를 사용할 수 있다. fun main() { val li = listOf(1, 2, 3) val (n1, n2, n3) = li println("$n1, $n2, $n3") // 1, 2, 3 ... Read More
-
DO NOT USE java.util.Stack
⭐ 위 내용은 Stack 클래스의 JDoc 내용이다. 공식적으로 이 클래스를 사용하기 보다는 Deque 사용을 권장하고 있다. 그 이유와 대안에 대해서 알아본다. Stack 은 Vector 를 상속한다 java.util.Stack 의 구현부를 보면 Vector 를 상속하고 있는 것을 알 수 있다. S... Read More
-
Android BottomNavigationView with Jetpack Navigation
⭐ 앱에서 하단 네비게이션은 흔히 볼 수 있는 UI 이다. 아마도 가장 익숙한 것이 카카오톡의 하단 메뉴인 것 같다. (물론 카카오톡이 Jetpack Navigation 으로 작성되었다는 말은 아니다) 이번 글에서는 Jetpack Navigation 을 사용해서 하단 네비게이션을... Read More
-
Android TextView 를 중첩(계층)할 수 없는 이유
TextView 를 계층 구조로 만들 수 있을까? 안드로이드 스튜디오에서 새 프로젝트를 만들면 activity_main.xml 파일에 위와 같이 TextView 하나가 생성되어 있다. 자세히 보면 ConstraintLayout 태그 안에 TextView 단일 태그가 있는 형태이다. 그럼 TextView 도 C... Read More
-
StateFlow 와 sharedFlow
⭐ 본 글은 StateFlow 와 SharedFlow 를 보고 정리한 글입니다 상태를 나타내는 StateFlow UI 를 다루는 상태를 생각해보자. 로그인 여부에 따라 “로그인”, “로그아웃” 등 상태를 정의할 수 있으며 화면에 표시하는 데이터도 “로딩 중”, “데이터 이용 가능”, “오류” 등의 상태로 정의할... Read More
-
비동기 플로우에 대해서 알아보자 (2)
⭐ 이전 게시글에 이어지는 내용이다 Flow 플래트닝 (Flattening) 플로우는 비동기로 수신되는 값들의 시퀀스를 나타낸다. 그렇기 때문에 각 값이 다른 값 시퀀스를 요청하는 것이 쉬워진다. 예를 들어 다음과 같이 500ms 간격으로 두 문자열을 방출하는 플로우를 만들 수 있다. import kotlinx.coro... Read More
-
비동기 플로우에 대해서 알아보자 (1)
⭐ 중단 함수를 사용할 때는 하나의 값만 반환한다. 만약 여러 개의 값을 비동기적으로 반환하고 싶다면 우리는 Flow 를 사용할 수 있다. 여러 값을 표현하기 여러 개의 값은 collections 를 사용해서 표현될 수 있다. 예를 들어 3 개의 숫자를 담고 있는 List 를 반환하는 simple 이라는 함수로 리스트를 ... Read More
-
Git merge와 rebase. 언제 어떻게 사용해야 할까
⭐ git으로 branch를 만들어서 작업해보았다면 merge와 rebase에 대해서 들어본 적이 있을 것이다. 이 두 깃 명령은 비슷한 역할을 하는데 동작하는 방식을 아주 다르다. 여기서 오는 장단점과 언제 어떤 명령을 사용해야 적절한지에 대해서 포스팅하고자 한다. 본 글은 Merging vs. Rebasing을 번역한 글... Read More
-
Coroutine Context And Dispatchers
⭐ 코루틴은 항상 CoroutineContext 내에서 수행된다. 그리고 코루틴 컨텍스트는 다양한 요소(Elements)들로 구성된다. 디스패처와 스레드 코루틴 컨텍스트는 연관된 코루틴들이 실행될 때 사용할 스레드나 스레드 풀을 결정하는 코루틴 디스패처를 포함한다. 특정 스레드에서 동작하게 하거나, 특정 스레... Read More
-
How to get longest continuous list in kotlin
⭐ 이번에 주어진 정수형 배열에서 가장 긴 연속된 배열을 찾아야하는 작업이 있어서 그 방법에 대해 찾아보게 되었다. fold vs reduce 1, 2, 3, 5, 7, 8, 9, 10, 11, 13 을 가진 리스트를 위 코드로 수행하면 1, 2, 3 / 5 / 7, 8, 9, 10, 11 / 13 으로 쪼갤 수 있다. kotlin의 fold는 red... Read More
-
How to sort List<Pair<Int, Int>> in kotlin
⭐ 이번에 List<Pair<Int, Int>> 타입을 정렬해 줄 경우가 생겨서 알아보게 된 내용이다. 정확히는 Map<Int, Int> 자료 구조를 value - key 순으로 정렬하고자 했는데 Map의 아이템으로 Pair가 사용되기 때문에 같은 내용으로 생각해도 될 것 같다. Pair는 2개의 아이템이 하나의 ... Read More
-
Coroutine withContext + NonCancellable
⭐ 본 글은 withContext 코루틴 빌더가 하는 일은 무엇인가?을 읽고 공부한 내용을 정리하는 글입니다. 지난 내용 이전 글에서 중단된 코루틴의 finally { } 블록에서 중단 함수를 사용할 때 withContext를 사용하는 것에 대해 다뤘다. 간단히 살펴보면 다음과 같다. fun main(... Read More
-
Kotlin Coroutine Cancellation
⭐ 본 글은 코루틴 공식 가이드 읽고 분석하기 — Part 2을 읽고 공부한 내용을 정리하는 글입니다. 모든 중단 함수는 취소 요청에 응답해야 한다 코루틴에서 실행되는 모든 중단 함수는 취소 요청에 응답하도록 구현되어야 한다. 중단 함수의 실행 중 취소 가능한 구간마다 취소 요청이 있었는지 확인하고, 취소 요청이 있었다... Read More
-
AutoHotKey를 사용해 완전 편하게 개발자 키매핑 하기
⭐ 본 게시글에서 공유한 스크립트는 언제든 변경되거나 추가될 수 있습니다! 깃허브에서 최신의 내용을 확인할 수 있습니다. 복사해서 자유롭게 사용하세요! 더 좋은 방법이나 버그, 추가하면 좋을 키매핑 등 자유롭게 의견 주세요! 완성된 키매핑을 바로 보고싶다면 클릭하세요. 극한의 효... Read More
-
Coroutine suspend function
⭐ 본 글은 suspend 함수란 무엇이고 어떻게 동작할까?을 읽고 공부한 내용을 정리하는 글입니다. 코루틴을 사용해봤다면 suspend 키워드가 낯설지 않을 것이다. 중단(suspend)함수 없는 코루틴은 상상할 수 없다. 일반 함수(순차 함수)가 호출된 후 함수의 모든 내용을 모두 수행한 후 반환되는 것에 반해 ... Read More
-
CoroutineContext and CoroutineScope in Kotlin and Android
⭐ 본 글은 CoroutineContext 와 CoroutineScope 란 무엇인가?을 읽고 공부한 내용을 정리하는 글입니다. CoroutineContext.kt 다음 코드들은 CoroutineContext.kt 파일에 있는 코드들이다. CoroutineContext 인터페이스 public interf... Read More
-
Kotlin Coroutine Basic
⭐ 본 글은 코루틴 공식 가이드 읽고 분석하기 - Part1을 읽고 공부한 내용을 정리하는 글입니다. 코루틴은 호출 스레드를 블록하지 않는다 package com.smp.coroutinesample.basic import kotlinx.coroutines.GlobalScope import kotlinx.corouti... Read More
-
CS 쓱 훑어보기 - 2. 객체지향 프로그래밍
⭐ 객체지향 프로그래밍(OOP, Object-Oriented Programming)은 객체들이 상호작용하며 객체 내부의 메서드를 활용하는 방식을 뜻한다. 객체 지향을 잘 하기 위해서는 설계가 중요하다. 객체지향 프로그래밍의 특징 4가지 추캡상다… 추성훈 캡모자 산다…. 추상화, 캡슐화, 상속성, 다형... Read More
-
CS 쓱 훑어보기 - 1. 디자인 패턴
⭐ 디자인 패턴이란? 디자인 패턴은 프로그램을 설계할 때 반복되는 문제점들을 해결하기 위한 일종의 규약이라고 할 수 있다. 싱글톤 패턴 싱글톤 패턴은 하나의 클래스가 하나의 인스턴스만을 가지는 패턴이다. 주로 DB 연결에 많이 사용된다. 인스턴스를 생성하는 비용이 줄어드는 장점이 있으나 의존성이 높아지는 단점이 있... Read More
-
[SUWIKI] 문제 해결 - 네트워크 에러 핸들링
문제 발생 잘 동작하던 앱이 갑자기 켜자마자 앱이 죽어버리는 버그가 발생했다. 로그를 확인해보니 네트워킹을 하던 중 죽은 것 같은데 응답을 받지 못한 상태로 터진 것을 확인했다. 원인을 파악해보니 Base URL로 사용하던 주소가 충돌을 일으키면서 UnKnownHostException가 발생한 것이다. Suwiki 안드로... Read More
-
내가 보려고 만든 안드로이드 버전 + API Level
⭐ 안드로이드를 개발하다 보면 현재 최신 안드로이드 버전이 무엇이고, 어떤 라이브러리는 타겟 SDK가 몇이고 킷캣이 어쩌고 오레오가 어쩌고… 정리가 안 된 상태로 혼란을 겪고 있다가 안드로이드 개발 공부한다고 하면 최소 버전 정보는 알고 있어야겠다는 생각이 들어 이번 기회에 정리하게 되었다. 표 보는... Read More
-
Android. How to always display Suffix Text on EditText
🔥해결하고자 하는 문제 위와 같은 디자인을 받았다. 현재 진행 중인 프로젝트에서는 학교 이메일로만 가입하는 정책이라서 뒤에 항상 동일한 메일 도메인을 표시한다. 저렇게 지정하는 것은 Material 디자인의 TextInputLayout과 TextInputEditText로 가능하다. Material 컴포넌트... Read More
-
미립자 팁. 앱바 밑에 그림자 없애기
이전 <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:elevati... Read More
-
미립자 팁. 테마에 앱바 스타일 적용하기
해결 할 문제 많은 프로젝트에서 ActionBar가 없는 테마를 사용하고, 상황에 맞게 직접 앱바를 추가해서 사용할 것이다. 나 역시도 NoActionBar 를 사용해 직접 xml에서 AppBar를 추가해서 사용한다. <style name="Theme.MyTheme" parent=... Read More
-
안드로이드에서 FCM 사용해보기-2
🔥프로젝트 준비 안드로이드에서 FCM (Firebase Cloud Messaging)을 사용하기 위한 세팅은 이전 게시글을 참고하세요 안드로이드에서 FCM 사용해보기-1 ViewBinding 세팅 build.gradle (:app) android { // ... buildFeat... Read More
-
안드로이드에서 FCM 사용해보기-1
⭐ 이번 게시글에서는 파이어베이스를 사용해 본 적 없거나 FCM을 사용해 본 적 없는 분들을 위해 파이어베이스 프로젝트를 생성하고 설정한 후에 Android 프로젝트를 등록하는 방법에 대해 단계별로 자세히 설명하려고 합니다. FCM에 대해서 궁금하다면 이전 게시글을 참고해보세요! 🔥새 안드로이드 프로젝트 생성 ... Read More
-
FCM에 대해 알아보자
⭐ ℹ️이 게시글에서 소개하는 예제들은 Android의 경우만 소개합니다. iOS, 웹 등의 예제는 해당 파트에 첨부된 공식 문서 링크를 확인하세요! 바로 FCM을 실습해보고 싶다면 다음 게시글을 확인하세요! 🔥FCM 은 뭐하는 놈인가? 공식 문서 FCM은 Firebase Cloud Messaging의 ... Read More
-
JWT란 무엇인가?
🔥JWT JWT : Json Web Token JWT는 당사자 간에 JSON 객체로 정보를 안전하게 전송할 수 있는 개방형 표준이다. JWT는 API를 사용하는 클라이언트를 인증 및 식별하는데 사용할 수 있어서 보통 RESTful API에서 사용한다. 🔥인증 vs 인가 JWT를 설명하면서 인증과 인가에 대한 ... Read More
-
[SUWIKI] Networking
Intro SUWIKI에서 서버 통신을 위한 구성을 어떻게 했는지 포스팅합니다. 네트워킹을 위해 사용한 기술은 Retrofit2 입니다. API는 REST API를 따릅니다. (이에 대한 내용은 백엔드와 관련된 내용이므로 자세히 설명하지 않습니다) 이하 내용에서는 편한 말투로 진행하겠습니다 😉 De... Read More
-
[SUWIKI] Introduce
🐥 무슨 프로젝트 인가요? SUWIKI는 수원대학교 시간표를 만들 수 있는 시간표 앱입니다. 기존에 시간표 앱으로 많이 사용하던 애브리타임이 더 이상 수원대학교의 시간표를 지원해주지 않으면서 수원대학교 학생들이 시간표 관리로 겪을 불편함을 줄이고자 시작된 프로젝트입니다. 시간표 기능에 더불어 모든 강의에 대한 강의 평... Read More
-
Effective Kotlin_아이템5. 예외를 활용해 코드에 제한을 걸어라
내용 요약(Notion) TIL (Today I Learned) 코틀린에서 코드의 동작에 제한을 걸 때 사용할 수 있는 방법들 오늘 읽은 범위 1부. 좋은 코드 1장. 안정성 아이템5. 예외를 활용해 코드에 제한을 걸어라 Content 아규... Read More
-
Effective Kotlin_아이템4. inferred 타입으로 리턴하지 말라
내용 요약(Notion) TIL (Today I Learned) 타입을 확실하게 지정해야 하는 경우엔 명시적으로 타입을 지정하자 오늘 읽은 범위 1부. 좋은 코드 1장. 안정성 아이템 4: inferred 타입으로 리턴하지 말라 ... Read More
-
Effective Kotlin_아이템3. 최대한 플랫폼 타입을 사용하지 말라
내용 요약(Notion) TIL (Today I Learned) 상태를 정의할 때 변수와 프로퍼티의 스코프를 최소화하는 것이 좋다. 오늘 읽은 범위 1부. 좋은 코드 1장. 안정성 아이템3. 최대한 플랫폼 타입을 사용하지 말라 ... Read More
-
Clean Code_10장. 클래스
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 클래스는 단일 책임만 가져야 한다는 사실을 배웠다. 오늘 읽은 범위 10장. 클래스 책에서 기억하고 싶은 내용 클래스 체계 표준 자바 관례에 따르면 변수 등장 public static 상수가 있으면 맨... Read More
-
Clean Code_9장. 단위 테스트
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 테스트 코드의 중요성과 테스트 코드를 깔끔하게 짜는 방법에 대해서 훑어봤다. 오늘 읽은 범위 9장. 단위 테스트 책에서 기억하고 싶은 내용 TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를... Read More
-
Clean Code_8장. 경계
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 외부 코드를 사용할 때 우리 코드와 외부 코드 사이의 경계를 어떻게 다룰 지 학습했다. 오늘 읽은 범위 8장. 경계 책에서 기억하고 싶은 내용을 써보세요. 외부 코드 사용하기 패키지 제공자나 프레임워크 제공자는 더 많은 환경... Read More
-
Clean Code_7장. 오류 처리
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 오류를 적절히 처리하는 방법에 대해서 학습했다. 오늘 읽은 범위 7장. 오류 처리 책에서 기억하고 싶은 내용을 써보세요. 뭔가 잘못될 가능성은 늘 존재한다. 뭔가 잘못되면 바로 잡을 책임은 바로 우리 프로그래머에게 있다... Read More
-
Clean Code_6장. 객체와 자료 구조
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 객체와 자료 구조의 특징과 차이점에 대해서 학습했다. 오늘 읽은 범위 6장. 객체와 자료 구조 책에서 기억하고 싶은 내용을 써보세요. 자료 추상화 구현을 감추려면 추상화가 필요하다. getter와 setter로 변수를 다... Read More
-
Clean Code_5장. 형식 맞추기
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 코드의 가독성을 올리기 위해서 어떤 방법과 규칙을 사용해야 하는지 배웠다. 오늘 읽은 범위 5장. 형식 맞추기 책에서 기억하고 싶은 내용을 써보세요. 코드 형식은 의사소통의 일환이다. 의사 소통은 전문 개발자의 일차적인 의무다... Read More
-
Effective Kotlin_아이템2. 변수의 스코프를 최소화하라
내용 요약(Notion) TIL (Today I Learned) 상태를 정의할 때 변수와 프로퍼티의 스코프를 최소화하는 것이 좋다. 오늘 읽은 범위 1부. 좋은 코드 1장. 안정성 아이템2. 변수의 스코프를 최소화하라 책에서 기억... Read More
-
Clean Code_4장. 주석
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 좋은 주석과 나쁜 주석에 대해 알아보았다. 일반적으로 주석은 필요하지 않는 경우가 많다. 오늘 읽은 범위 4장. 주석 책에서 기억하고 싶은 내용을 써보세요. 나쁜 코드에 주석을 달지 마라. 새로 짜라. -브라이언 W... Read More
-
Clean Code_3장. 함수
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 함수를 깔끔하게 만드는 여러 규칙들에 대해 학습했다. 오늘 읽은 범위 3장. 함수 책에서 기억하고 싶은 내용을 써보세요. 작게 만들어라! 함수를 만드는 첫째 규칙은 ‘작게’다. 함수를 만드는 둘째 규칙은 ‘더 작게!’ ... Read More
-
Clean Code_2장. 의미 있는 이름
#노마드코더 #북클럽 #노개북 요약 내용 (Notion) TIL (Today I Learned) 변수, 함수, 인수, 클래스, 패키지, 소스 파일, 디렉터리 등등 소프트웨어의 다양한 부분에 이름이 붙는다. 이러한 이름을 잘 짓는 방법에 대해 공부했다. 오늘 읽은 범위 2장. 의미 있는 이름 책에서 기억하고 싶은 내용을 써보... Read More
-
Effective Kotlin_아이템1. 가변성을 제한하라
책 내용 요약 (Notion) TIL (Today I Learned) 코틀린은 모듈로 프로그램을 설계하는데 모듈은 클래스, 객체, 함수, 타입 별칭, 톱레벨 프로퍼티 등 다양한 요소로 구성된다. 이런 요소 중 일부는 상태를 가질 수 있다. 상태는 var을 사용하거나 mutable을 사용하는 경우이다. 이번 장에서는 이런 상태... Read More
-
Clean Code_1장. 깨끗한 코드
#노마드코더 #북클럽 #노개북 내용 요약(Notion) TIL (Today I Learned) 이 책의 저자가 깨끗한 코드에 대해 어떻게 정의하고 있는지 알았다. 오늘 읽은 범위 1장. 깨끗한 코드 책에서 기억하고 싶은 내용을 써보세요. 실제 내용은 더 길지만 핵심적이라고 생각되는 부분만 요약한 내용입니다. ... Read More