오블완

Android

Android add library using toml

toml 파일을 사용하게 된 계기이번 신규 프로젝트를 진행하게 되었는데,그에 따라 프로젝트 자체를 새로 생성하면서 build.gradle 언어를 Kotlin DSL로 설정했더니Android Studio Koala를 쓰는 나에게 toml이 포함된 프로젝트가 생성되었다. 여기저기 오픈소스 라이브러리에서 혹은 developer 사이트에서도 자주 볼 수 있는 녀석이라이번 기회에 써보기로 했다. Retrofit 추가해보기어차피 대부분 앱은 네트워크 작업이 필요하고 그에 따라 가장 대중적인 라이브러리는 단연 Retrofit일 것이다. 하지만, 기존 toml을 사용해본적 없는 나로서는 상당히 검색할 시간이 필요했다. 먼저 toml 파일 수정하기[versions]... //retrofit = "2.11.0"serial..

Android

Android QR Code Generation

기능 추가 배경QR코드를 통해 로그인 정보를 공유한다. 물론 로그인 정보는 민감한 정보이므로 암호화가 필요하다. 장점서버가 필요없다.OS간 직접 파일을 옮기는 것이 아니기에 플랫폼 제약이 없다. 단점길이에 제한이 있다.카메라만으로도 정보가 보일 수 있어 비교적 보안에 약한 편이다.(암호화를 한다고 해도 말이다.) 라이브러리 추가하기여기서 사용한 라이브러리는 이전 글에서도 등장한 적이 있다.https://github.com/journeyapps/zxing-android-embedded GitHub - journeyapps/zxing-android-embedded: Barcode scanner library for Android, based on the ZXing decoderBarcode scanner l..

Android

Android Watchdog 기능 추가하기(OS 9)

이번 글은 기능에 대해 소개하기 전, 먼저 OS 9(Pie)을 타겟으로 만든 기능임을 알린다. 기능 및 배경 소개우리가 어떤 프로그램이 지속 실행되어야하는 상황에 만약을 대비해 넣는 기능 중에 하나가한번쯤은 봤을만한 꺼지면 재실행하는 기능이다. 이 기능은 보통 Watchdog(와치독, 워치독)이라 불린다. 이번에 안드로이드 셋톱박스에 맞추어 앱을 제작하게 됐는데이 때, 꺼지지 않는 앱이 필요했고 만에 하나를 대비해 이 기능을 준비하게 되었다. Manifest 수정하기먼저 Foreground Service 권한을 설정해야 한다. 갑자기 무슨 Foreground Service인가 싶을 수 있다. Background Service에서 Activity를 실행할 수는 있지만(하위 OS이기에 가능하지만)OS에서 S..

Android

Android Phone Number Format(자동 하이픈 추가)

내가 지금까지 개발한 앱은 신기하게도 휴대폰 번호 입력 칸이 필요한 경우가 없었다. 하지만, 이번에 해당 UI가 필요해져 추가하다보니01011112222처럼 하이픈이 없는 텍스트로만 입력이 되었다. 팀장님은 입력된 길이를 기반으로 하이픈을 추가하면 되지 않냐고 하셨지만,안드로이드에서 제공하는 기능이 있을 것이라 생각했고 그렇게 찾은 기능을 공유해본다. 정말 간단한 적용법먼저 xml EditText의 inputType을 phone으로 설정한다. 그럼 아래와 같은 키보드 형식이 보이게 된다. 이후 TextChangedListener를 설정해준다.binding.editPhoneNumber.addTextChangedListener(PhoneNumberFormattingTextWatcher()) 결과 확인해보기영..

주저리주저리/음식점

수원 행궁동 행루즈수제버거

퇴근길에 수제버거가 너무 먹고 싶어진 나머지 결국 행궁동에 내려 버거집을 찾게 되었다. 장안문 근처에 유명한 곳은 이 곳과 치킨버거가 주 메뉴인 한 곳이 있었는데소고기 패티가 너무 땡기는 바람에 행루즈 수제버거로 왔다. 입구조명부터 분위기가 따뜻해서 좋았다. 주문하기네이버로 예약 시, 밀크쉐이크 쿠폰을 주셨는데주문은 자리에서 QR코드로 주문하기 때문에 사용할 수가 없었다. 그래서 카운터로 가 사장님께 네이버 예약했다고 말씀드리니 밀크쉐이크를 따로 주셨다. 식기도 저렇게 컵..?에 꽂아주시니 통일감이 좋았다. 메인 메뉴인 버거는 치즈버거를 주문했는데 내가 할라피뇨를 안 좋아해서 선택한 메뉴였다. 혹자는 할라피뇨 들어간 메뉴를 주문하면 할라피뇨를 빼달라고 하면 되지 않냐고 하겠지만,나는 모든 재료가 들어간 ..

Language/Kotlin

Coroutines 여러 개로 연산 속도 높이기

이번 글에서는 전에 다루었던 withContext로 스레드를 전환 후 연산 작업을 더 빠르게 수행해보려고 한다. 기존에는 팩토리얼 계산을 Default Dispatcher를 사용해 하나의 코루틴에서 연산을 수행했다.이번에는 여러 개의 코루틴에서 연산을 수행한다. 어떤 구조로 실행할까팩토리얼을 몇개의 코루틴으로 나눠 실행할지 정해야 한다.실행할 코루틴 갯수만큼 연산할 숫자의 길이를 동등하게 분배한다.작은 범위를 계산하는 서브 코루틴을 동시에 실행시킨다.모든 서브 코루틴이 종료되는 것을 기다린다.모든 서브 코루틴이 종료되면 fold 함수를 사용해 작은 범위들을 모두 곱한다. 코드suspend fun calculateFactorial( factorialOf: Int, numberOfC..

Language/Swift

Swift - 프로퍼티(Properties)

프로퍼티의 정의 및 사용프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다.(열거형 내부에는 연산 프로퍼티만 구현 가능) 연산 프로퍼티는 var키워드로만 선언 가능하다. 연산 프로퍼티는 읽기 전용으로는 구현 가능하지만, 쓰기 전용으로는 불가능하다. 읽기, 쓰기 둘 다 가능하게 하려면 get, set 블럭을 구현하면 된다. set 블럭에서 암시적 파라미터로 newValue를 사용할 수 있다. 종류저장 프로퍼티(Stored Properties)연산 프로퍼티(Computed Properties)타입 프로퍼티(Type Properties) 코드 예시struct Student { // 인스턴스 저장 프로퍼티 var name: String = "" var `class`: String ..

주저리주저리/팝업스토어

수원 스타필드 포켓몬스터 팝업스토어

이번에 다녀온 팝업스토어는 핫하디 핫한 스타필드에서 진행한 팝업스토어였다. 수원 스타필드 1층에서 진행한 포켓몬스터 팝업이었는데,10월 초 징검다리 휴일이 있던 주에 연차를 쓴 날이 있었다. 그렇게 평일 오후에 가서 그런지 입장하는데 30분도 걸리지 않았다. 기다리기일단 알림톡 대기를 걸어두고 윗층 카페를 가서 자리를 잡았다. 천천히 공부할 내용을 살피다 보니 입장하라는 톡이 왔고,금방 돌아올 것을 예상했기에 그냥 가방을 두고 다녀왔다. 카페에 사람도 거의 없었기에 더욱 과감히 나올 수 있었다. 입장한 뒤가장 먼저 눈에 들어왔던 굿즈는 한국 느낌이 섞인 뱃지였다.이렇게 무난한 디자인과 달리 가격은 매우 사악해서 기억이 나지 않을 정도.. 물론 내가 뱃지를 사려는 생각이 없었기에 더욱 기억이 나지 않는 것..

Android

Android Compose WebView PullToRefresh 기능 구현하기

제목에서 본 기능은 갤럭시 유저라면 삼성 브라우저를 통해 익숙한 기능일 것이다. 다만, 이 기능을 앱의 웹뷰에서 적용해야하는지는 기획에 따라 달라지겠지만나는 이번에 Compose 공부도 하는 겸 추가해보았다. 본격적으로 글을 시작하기 전 내가 Compose에 대한 이해가 상당히 미진하다는 점을 알린다. Material3 라이브러리 버전먼저 나는 이번 프로젝트에서 compose material3 라이브러리 최신 버전인 1.3.1을 사용했다. pullToRefresh가 1.3.0 버전에서 추가되었기 때문이다. 제목에 굳이 웹뷰를 적은 이유보통 android compose pulltorefresh를 검색어로 입력하면LazyColumn에 있는 리스트를 갱신하는 예제가 매우 많다. 하지만, 나는 전체화면인 웹뷰 ..

Language/Kotlin

Java, Kotlin Interoperability 해결하기

이번 글은 최근 Java -> Kotlin 변환과Java 클래스에서 Kotlin 클래스를 사용하면서 겪은 이슈를 공유해본다. 문제 상황 설명먼저 Java 클래스를 Kotlin 클래스로 변경했다. 이 때 특정 변수는 자료형을 변경하면서까지 리팩토링을 진행했다. 그리고 다시 변경한 Kotlin 클래스를 Java 클래스에서 사용하는 부분이 필요했다.(아래처럼 말이다)class SomeData { var a: UInt = 0 var b: Int = 0}public class User { public void someMethod() { SomeData someData = new SomeData(); someData.getB(); someData.getA(); }} Kot..

BonusTrack02.dev
'오블완' 태그의 글 목록