kotlin 16

Room 데이터베이스 복습 (nowinandroid 를 예로 간단히 살펴보기)

이번에 가벼운 사이트 프로젝트를 진행하는데, MVP 때는 서버 없이 작업하게 되었다. 그에 따라 로컬 데이터소스만을 활용해서 데이터를 관리해야해서 오랜만에 디비 셋업부터 여러 쿼리를 작성하게 되었다. 그래서 앞으로 입문부터 쿼리 예시, 마이그레이션, 서버와 동기화 등의 주제로 포스팅하려하는데 오늘은 그 시작인 입문이다. 왜 로컬에 데이터를 저장해야하는 경우가 생기는지, 왜 Room 을 쓰면 좋은지, 구성요소는 어떻게되고, 기본적인 사용예시까지만 소개하려한다. 로컬에 데이터를 저장해야하는 경우 예시 대부분 인터넷이 끊긴 경우에도 유용한 정보를 보여주기 위함이다. 네이버 웹툰을 즐겨 사용하는 안드로이드 유저라면 지금 인터넷 연결을 해제하고 네이버 웹툰을 들어가보았을 때 인터넷이 끊겼음에도 배너를 제외한 홈화..

Android/Room 2023.01.15

[Kotlin] 코틀린의 연산자 관례 정리, 어떤 클래스든 연산시켜보자!

코틀린에서 숫자가 아닌 객체에 대해서도 + - * / 등의 연산을 하는 경우를 보았을 것이다. 또한 컬렉션도 배열도 아닌 타입이 [] 로 프로퍼티에 접근한다든지 하는 것도 보았을 것이다. 예를들면 컴포즈에서 사용하는 Offset 클래스이다. (본 글이 어떤 Offset 이 어떤 클래스인지 논하는 글은 아니므로 Offset 은 x, y 라는 프로퍼티를 가지고 있고 있는 클래스라는 것에 집중한다.) 아래와 같이 Offset 끼리 연산해서 새로운 Offset 을 만드는 예시를 살펴보자 Offset(1f, 2f) + Offset(2f, 3f) 위 연산이 가능한 이유는 Offset 클래스가 plus 라는 이름의 특별한 메서드를 정의했기 때문이다. operator fun plus(other: Offset): Off..

Kotlin 2023.01.08

[Kotlin] 흥미돋는 코틀린의 타입을 정리해보자

오늘은 Kotlin in Action 을 읽고나서, 코틀린의 타입 시스템에 대해서 정리해보려고 한다. 타입은 어떤 값들이 가능한지와 그 타입에 대해 수행할 수 있는 연산의 종류를 결정하는 것이다. 코틀린으로 코딩하는데 문제가 없고 편하다고 생각했던 사람에게도 큰 도움이 되는가 물을 수 있겠지만 나는 코틀린을 쓰면서 단순히 편하다고 느꼈던 것들에 대해, 코틀린 컴파일러 개발자가 왜 이렇게 만들었는지 말해주는 설계 의도를 보며 굉장한 재미를 느끼고있다. 그래서 단순한 사용 방법보다는 키워드와 클 틀로 정리해보려고한다. (틀린 부분이나 이견이 있다면 댓글 남겨주시면 매우 감사합니다ㅎㅎ) 코틀린의 원시타입 코틀린에서는 원시타입과 래퍼타입을 구분하지 않는다! 그래서 개발자는 항상 같은 타입을 사용하게 된다. 자바..

Kotlin 2023.01.05

[Android/GraphQL] Apollo Kotlin (시작 ~ 쿼리실행)

[목차] - 도입 - 용어 정리 - 프로젝트에 Apollo 추가하기 - Schema 추가하기 - 쿼리 추가하기 - 쿼리 실행하기 - 마무리 [도입] 이름과 대략적인 내용만 들어보고 써보진 않았다. 최근에 쓰게될 일이 생겨서 그 전에 테스트 겸 셀프 실습을 진행해본다. 모킹 서버를 어디서 찾을까 하다가 Rick and morty (예전에 즐겨본 애니메이션) api 가 눈에 들어왔고 Apollo, GraphQL 공식문서를 참고하여 적용하려 한다. 설레는 마음으로 시작! 릭앤모티 api Documentation This documentation will help you get familiar with the resources of the Rick and Morty API and show you how to m..

[Programmers/Kotlin] 조이스틱 (브루트포스 풀이, 오히려 빠르다?)

[도입] 아마 프로그래머스에서 코딩테스트 준비해본 사람 중 이 문제 모르는 사람 없을 것 같다. 고득점 Kit 의 그리디 편에 수록된 문제이다. 나는 그리디로 풀려고 노력하다가 시간이 너무 오래걸려서 일단 브루트포스로 풀어보았다. (그리디 방법을 모색할 때마다 반례를 찾아서.. 그리디를 통과하는 코드를 찾아서 뭔지 묵혀두고 공부해야겠다.) 브루트포스로 이 문제를 푼다고했을 때, 이 문제의 핵심은 A가 아닌 모든 알파벳의 위치를 방문하는 최소의 움직임 수라고 생각한다. 왜냐하면 알파벳을 바꾸는 것은 +- 연산만으로도 충분하고 따로 작업할 수 있기 때문이다. 이 문제 브루트포스로 풀면 시간초과 나지 않냐? 고 하시는 분을 위해 말씀드리자면 name 의 길이가 최대 20(N 이라 하자)이라 가능하다고 본다. ..

[Programmers/Kotlin] 여행 경로 (DFS)

[도입] 오랜만에 괜찮다고 생각되는 문제를 만나서 글을 작성하게된다. 문제는 굉장히 간단하다. 출발공항, 도착공항 쌍으로 이루어진 티켓들이 주어지는데, 이 티켓을 모두 사용(이게 이 문제의 핵심이다.)하는 공항경로를 만드는 문제이다. 공항을 정점이라고 했을 때, 보통 정점을 모두 방문하는 문제를 많이 풀어본 사람으로서 (그래서 BFS, DFS 시 정점을 위주로 방문여부를 확인) 좀 당황했었다. 문제에 대한 자세한 내용은 아래를 참고한다. 코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers...

[Kotlin] String 핸들링을 위한, 코틀린의 String 클래스를 뜯어보자

실제 서비스를 위해 코딩하다보면 String 다뤄야할 때가 많다. 또한 내가 기업 코테를 많이 본 것은 아니지만 코테 볼 때마다 매번 간접적으로나 직접적으로나 String 핸들링 문제가 나온 걸로 기억한다. 매우 쉬운 거라고 생각해서 방심하다가 뒷통수 맞기 딱 좋다. (사실 최근에 맞고 울었다.) 자주 만나는 문제일 수록 많은 코드를 작성하게 되니, 그 코드를 간결하게, 우아하게 그리고 정확하게 코딩하기 위해 String 클래스와 확장함수를 뜯어보며 정리해보려고한다. 실제 서비스이든 알고리즘 테스트이든 도구를 사용해서 시간을 아끼고 로직에 집중하자는 내 스스로의 취지이다. 또한 내부구현을 살펴보면 내가 커스텀 기능을 만들어야할 때 좋은 귀감이 될 수 있다고 생각한다. 일단 넓고 얇게 다루어 상황에 맞게 ..

[Android] WorkManager 로 복잡한 백그라운드 작업을 쉽게 해결한다고? (기본 사용법과 예시코드 포함)

[공부하게된 계기] 안드로이드 공부를 시작하고 스레드를 이용한 적은 있지만 앱 프로세스가 죽어서도 백그라운드에서 작업하게 할 일이 없었다. 하지만 최근 타이머 관련 오픈소스 작업을 시도하며, 그리고 과제전형 문제를 풀면서도 백그라운드 작업을 공부하게 되었는데 백그라운드 관련 라이브러리 중에서 최근 가장 핫한 WorkManager 를 공부해야겠다고 생각했다. [그래서 WorkManager 뭘 하는 건가?] 백그라운드 세 가지 작업종류의 persistent work 를 다루는데 추천되는 라이브러리이다. 백그라운드 작업의 종류에 관해서는 내가 전에 써놓은 아래링크를 참고하면 된다. [Android] 안드로이드의 Background 작업 Background 작업이 필요할 때! UI 스레드로 실행이 오래걸리는 작..

[Kotlin/프로그래머스] 다리를 지나는 트럭

[문제소개] 트럭을 1칸, 다리를 N (문제의 bridge_length) 칸이라고 했을 때 각 트럭 무게와 다리 무게제한을 고려하여 모든 트럭이 지나가는 데 걸리는 초를 구하는 문제 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr [나의 풀이] 일단 매 초마다 루프를 돌면서 각 반복마다 일차원 조회를 하면 O(N^2) 이고 N 이 10000이므로 시간초과가 날 가능성 때문에 O(N) 으로 풀 수 있는 방법을 고민했다. 그렇다 해도 입력에 따라 결과가 달라지고 경우의 수도 많으므로 시..

[Kotlin/프로그래머스] 거리두기 확인하기 (2021 카카오 채용연계형 인턴십)

코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr [문제 소개] 1. 5 * 5 이차원 배열의 대기실이 주어졌을 때 2. 맨해튼 거리로 2 이하가 되게 사람이 존재해서는 안된다는 거리제한 조건 3. 단, 벽이 존재하여 상하좌우 4방향 기준으로..