본문 바로가기

전체 글267

[Android, Kotlin] SwipeToDismiss을 이용한 밀어서 삭제하는 기능 구현하기 (15) 이번 포스팅에서는 LazyColumn 안에 SwipeToDismiss을 이용해 옆으로 밀어서 일정을 삭제할 수 있도록 하는 기능을 구현해 보겠다. SwipeToDismiss는 생각보다 많이 어렵지는 않았기에 이 글을 보고 나서 쉽게 사용할 수 있을 것이라고 생각한다. 그러면 바로 어떻게 사용하는지 알아보자. 참고로 따로 dependency를 설치할 필요는 없다. compose 기본 dependency에서 모두 지원되는 기능들이다. 1. dismissState 생성 SwipeToDismiss를 이용하기 위해서는 dismissState 데이터가 필요하다. dismissState는 사용자가 item을 옆으로 밀었을 때를 감지하는 역할을 한다. val dismissState = rememberDismissSta.. 2024. 4. 16.
[Android, Kotlin] 통계 화면 구성하기 (14) 이번에 드디어 통계 화면 구현을 마무리 짓게 되었다. firebase realtime database를 썼을 때는 어떻게 구현해야 할까 막막했는데 firestore로 구현하니까 firestore에 내장된 필터 덕분에 따로 차트용 collection을 만들 필요 없이 하나의 collection으로 해결했다. 그러면 바로 통계 화면을 제작하면서 겪었던 시행착오들을 알아보자. 1. 통계 화면 ui 요소 추가 이번에 planner를 만들면서 통계 화면에 차트 2개(이번 주 일정, 주간 일정)만 있는 건 너무 심심해 보여서 ui 요소도 추가하고 차트 데이터도 바꾸기로 했다. 이번 주 일정을 보여주는 차트는 현재 날짜를 기준으로 그 주에 생성한 일정과 완료한 일정 2개의 데이터를 보여주는 차트였다. 다양한 데이터가.. 2024. 4. 14.
[Android, Kotlin] firebase 데이터베이스 변경하기 (13) 오랜만에 planner v2를 만져 보았다. 지금까지의 회사생활에서 보고 배운 것을 바탕으로 데이터베이스 쪽에 새로 수정해야 할 것들이 있어서 데이터베이스 코드를 전부 갈아주는 작업을 해주었다. 지금 바로 내가 어떤 작업을 했는지 알아보도록 하자. 1. 기존 데이터베이스의 문제점 planner v2에서는 firebase realtime database를 사용하고 있었다. 하지만 현재 통계 화면을 만들어야 하는 나의 경우에는 저장된 plan 데이터를 바탕으로 데이터를 필터링해서 통계 데이터를 구성해야 하는 상황이었다(데이터베이스를 변경한 가장 큰 이유이다.) 하지만 realtime database에서는 데이터를 필터링하기가 힘들어서 바로 이번에 코드도 볼 겸에 데이터베이스 코드를 모두 바꿔주기로 했다. 2.. 2024. 4. 10.
[Android] 안드로이드 스튜디오에서 무선 디버깅이 되지 않을 때, 수동으로 연결하는 방법 안녕하시죠?회사생활을 하느라 너무 오랜만에 포스팅을 하게 되었다.앞으로는 최소 2주에 1번씩은 포스팅을 해보도록 노력해 보겠다. 내가 이전에 이 문제 때문에 애먹었다가 최근에 문제를 해결했기 때문에 안 까먹기 위해 포스팅을 남긴다.이번에 해결한 문제는 android studio에서 무선 디버깅(wifi, pairing code)이 동작하지 않을 때, 문제를 해결하는 방법에 대해 적어보겠다. 동작하지 않는 무선 디버깅을 해결하기 위해서는 몇몇의 해결책이 있었는데(방화벽 해제, android studio 재시작 등등) 나에게 적용되지 않아서 cmd(명령 프롬포트)를 이용한 방법을 사용했는데 해결이 되었다. 1. platform-tools로 이동하기우선 명령 프롬포트를 켠 후자신이 설치한.. 2024. 4. 6.
[Dart] Dart 문법 (1) 오랜만에 포스팅을 작성해 본다.(거의 한 달만)최근에 회사에 취직해서 배워야 할 것들이 많아서 블로그 관리에 소홀했었다.회사에서는 flutter를 주로 사용하고 있기에 flutter에 사용하는 언어인 dart 문법부터 처음부터 배워보도록 하자.거두절미하고 바로 알아보도록 하겠다. 1. Dart 프로그래밍 규칙먼저 간단하게 dart 프로그래밍 규칙을 알아보자.코드는 위에서 아래로 순서대로 수행된다코드가 끝나면 세미콜론(;)을 붙인다.위에 규칙들 둘 다 다른 프로그래밍 언어들의 규칙과 유사하기 때문에 크게 신경 쓸 부분은 없다. 2. 변수 선언변수 선언 방법은 간단하다.var a = 'immgga';다음과 같이 선언할 수 있다.(위의 코드는 string 타입의 변수를 선언한 것이다.)변수 타입을 명확히 할 .. 2023. 12. 26.
[Android, Kotlin] Compose로 동적 checkBox 리스트 만들기 (12) 오랜만에 포스팅을 올려본다. 요즘 현생을 사느라 많이 바빴었기에, 이제야 Planner 개발 기록을 올리게 되었다. 또한 기존 checkBox 리스트의 문제를 해결하느라 더 오래 걸렸던 것 같다 >:( 이번에는 주간 통계표를 구현하면서 있었던 일들에 대해서 설명해 주겠다. 1. 계획 주간 통계 리스트를 만들기 위해 기존에 구현한 로직을 테스트하던 중, 나는 문제 하나를 발견했다. Planner의 일정을 보여주는 로직은 날짜를 클릭해서(날짜가 변함에 따라서) 일정의 정보가 바뀌어야 하는 로직으로 구현하였는데, 날짜를 클릭해서 날짜를 바꾸면 기존의 checkbox state가 변하지 않고 바뀌기 전 것으로 계속 남아있는 문제를 발견했다. 위와 같이 기존에 선택된 일정 정보(11월 27일의 가장 위의 2개의 .. 2023. 12. 4.
[Android, Kotlin] Compose에서 DataStore 사용하기 (11) 이번 시간에는 Plan Screen에 지난에 Create Plan을 만들면서 생성한 일정 정보를 앱에 띄워주는 작업을 해줄 것이다. 이 작업은 그냥 Firebase의 데이터를 불러와서 앱에다가 보여주면 되는 간단한 기능이고, 관련 자료도 많아서 굳이 코드를 보여주면서 자세히 설명해주지는 않겠다.(절대 귀찮아서가 아니다 ^^) 이번에 필자가 Plan Screen 기능을 적용하면서 겪은 문제는 여기 평범한 달력에 현재 날짜가 아닌 다른 날짜의 일정 정보를 추가하고자 할 때, 일정 추가를 통해 Create Plan Screen으로 갔다가 다시 이 화면으로 왔을 때에는 기본으로 설정한 날짜로 바뀌는 문제가 계속 발생했다. 그래서 이번에는 필자가 다음과 같은 문제를 어떻게 해결하였는지를 설명해보려 한다. 1. C.. 2023. 11. 19.
[Android, Kotlin] Firebase RTDB에서 데이터 순차적으로 삽입하기 (10) 이번 포스팅에서는 Firebase RTDB을 활용해 일정을 생성하는 기능을 만들어 보겠다. 드디어 일정을 생성하는 기능까지 왔다. 이번에 일정 생성 기능은 간단하게 만들어 보겠다. 일정 데이터는 schedule -> user uid -> 일정 리스트 순서대로 데이터를 저장할 것이고, 데이터 형태는 title, description, complete(완료 여부)로 저장하겠다. 위의 사진과 같은 형태로 저장을 할 것이고, 일정을 사용자가 여러 번 생성할 수 있기 때문에 기존 일정이 지워지지 않게 하면서 아래에 새로운 데이터를 넣는 방식으로 만들어볼까 한다. 대충 위와 같은 형태로 데이터가 저장되도록 하겠다. 설명은 끝났으니 바로 만들어 보겠다. 1. Firebase Database 라이브러리 추가 fireb.. 2023. 11. 12.
[Android, Kotlin] Android 12 버전 이상에서 Compose로 Custom Splash Screen 생성하기 (9) 이번 포스팅에서는 지난 포스팅에서 언급했다시피, 한 번 로그인했으면 로그인 정보가 저장되어 여러 번 로그인을 하지 않아도 되는 자동 로그인 기능을 만들어 볼까 한다. 필자는 자동 로그인 기능을 만들기 위해서 Splash Screen을 활용하고자 한다. 간단하게 로직을 설명하자면, 앱 실행 후 Splash Screen이 나타남 Splash Screen이 켜져 있는 동안 Firebase 로그인 정보가 있는지 확인한다.( 로그인 정보는 State로 확인, 있으면 true, 없으면 false) State의 상태에 따라서 시작 Route를 설정한다.(true면 main route, false면 login route) 이렇게 간단하게 로직을 설계해 주었다. Android 12 버전부터는 Splash가 기본으로 생성.. 2023. 11. 10.
[Android, Kotlin] Compose로 Firebase Google Login 구현하기 (8) 오랜만에 Planner V2 개발일지이다. 요즘 다른 활동(코테, 타 프로젝트)을 하느라 Planner V2를 잠시 놓았었는데 이제 다시 시작해볼까 한다. 이번에는 본격적인 기능 개발로 Firebase Google Login을 구현해 보도록 하겠다. 평범한(?) Planner에 구글 로그인을 넣은 이유는 로그인된 유저 정보를 이용해 일정들을 따로 Firebase Database에 저장하기 위해서이다. 그러면 바로 필자가 구글 로그인을 구현한 과정을 알아보자. 1. 라이브러리 추가하기 Firebase Auth 라이브러리를 추가해 주자. implementation("com.google.firebase:firebase-auth:22.2.0") implementation("com.google.android.gm.. 2023. 11. 9.
[Android, Kotlin] Retrofit에서 LocalDateTime 데이터 받아오기 1. 오류 상황 retrofit에서 localDateTime 데이터를 받아오던 중 다음과 같은 오류가 발생하였다. 위의 오류는 LocalDateTime parsing에서 문제가 생겨서 발생하는 오류이다. 이 오류를 해결하기 위해서 필자는 검색을 기반으로 gson에 기존의 localDatetime을 parsing 하는 작업의 코드를 추가하였다. val gson = GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss") .create() return GsonConverterFactory.create(gson) 위의 방법은 나에게 올바른 방법이 아니었다. 그러나 나는 한 블로그에서 방법을 찾을 수 있었다. https://lemontia.tistory.com/997 [r.. 2023. 11. 6.
[SQL] 코딩 테스트 대비 프로그래머스 SQL 문법 정리 이번 포스팅에서는 코딩 테스트를 준비하고 계신 분들을 위해 필자가 직접 프로그래머스 문제를 풀어보고 나서 사용한 SQL 문법을 아주 간단하게 정리해보고자 한다. 참고로 필자는 SQL 고득점 Kit을 이용해 SQL 문제를 풀었다. https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. Select sql에서 select는 특정 데이터를 출력할 수 있게 해 준다. 코딩 테스트 문제들은 거의 대부분 select를 사용하여 데이터를 출력하도.. 2023. 11. 3.
[Kotlin] 배열과 Map에 대해 알아보기 요즘 필자는 알고리즘 문제를 풀고 있다. 알고리즘 문제를 풀다 보면 배열은 거의 대부분의 문제에서 사용하는 것 같고, HashMap도 종종 사용하는 것 같았다. 그래서 이번에 코틀린의 배열과 HashMap의 차이에 대해 간단히 설명해보고자 한다. 앞으로 이런 간단한 알고리즘 개념에 대한 포스팅이 올라올 것 같다. 1. 배열(Array) 배열은 코틀린을 공부하지 않은 사람이라도 프로그래밍 언어를 하나라도 공부해 본 경험이 있으면 바로 알 수 있을 것이다. 바로 데이터의 집합을 배열이라고 하는데 자바의 배열 선언과는 달리 코틀린의 배열은 상당히 편리하면서도 복잡(?)하다.(필자 기준) 필자가 왜 복잡하게 느꼈냐면, 코드로 설명해 주겠다. 자바의 경우에는 다음과 같이 배열을 만들 수 있다. int[] intA.. 2023. 10. 27.
[Android, Kotlin] Compose에서 동적 List 만들기 (7) 이번 포스팅에서는 Planner v2의 일정 생성 화면을 구현하면서 알게 되었던 지식들을 풀어볼까 한다. 마지막으로 ui를 구현할 화면은 일정 생성 화면이다. 일정 생성 화면은 plan screen의 점선으로 된 추가하기 card처럼 아무것도 없는 화면에 그 card를 눌러서 일정을 생성하고 일정 card를 클릭해서 일정을 수정할 수 있게 구현해 보겠다. 간단하게 UI를 구상해 보았다. text 부분에 일정 생성이라는 타이틀을 넣고 처음에는 아무것도 없는 화면에 점선으로 된 + card를 누르면 일정이 생성되고 일정을 클릭하면 일정의 정보를 수정할 수 있도록 구현하겠다. 1. 일정 Card 구현 우선은 일정 추가 card부터 만들어 보자. card의 border를 점선으로 설정하는 방법은 이전 포스팅에서.. 2023. 10. 24.
[Android, Kotlin] Compose Lazycolumn의 scroll state 관리하기 (6) 이번에 Planner v2를 개발하면서 Plan(main) screen에서의 add schedule icon이 너무 사용자들에게 불편할 수도 있다는 느낌을 받았었다. 일정 header 부분에 + icon은 사용자들이 실제로 사용한다면 icon의 크기가 작아서 클릭이 힘들어 보일 것 같았다.(크기를 키우기에는 header 크기도 같이 커지기에 애매했다.) 그래서 기존의 icon을 LazyColumn의 맨 아래에 card로 만들어서 생성할 수 있도록 만들기로 했다. 그렇게 만들면 일정을 많이 생성하는 사용자들이 스크롤을 한참 해야 맨 아래로 도달해서 불편할 것 같았기에 따로 맨 아래, 맨 위로 스크롤 해주는 작은 button도 만들어 보기로 했다. 1. 자동 Scroll Button 만들기 button의 u.. 2023. 10. 21.
728x90