폰트 저장하기폰트를 사용하려면 일단 해당 폰트 파일을 저장해야 합니다. 위치는 res/font 에 저장하면 됩니다. 이 때 각 폰트의 굵기 파일도 각각 사용할 필요가 있다면 모두 저장해두면 좋습니다. 폰트 불러오기폰트를 선언해주어야 해요. 위에서 정한 폰트를 아래와 같이 선언해주세요. 참고로 폰트 클래스는 사진과 같습니다. 이 때 Font의 weight에 각각 파일 별로 weight를 지정해주면 TextStyle을 사용할 때 원하는 weight를 줬을 때 해당 파일이 적용됩니다.@Stablefun Font( resId: Int, weight: FontWeight = FontWeight.Normal, style: FontStyle = FontStyle.Normal, loadingStr..
Column & SingleChildScrollViewColumn과 SingleChildScrollView를 사용하면 단순한 형태의 스크롤뷰를 구현할 수 있습니다. SingleChildScrollView( child: Column( children: [ Container(), Container(), Container(), ], ),); 장점구현이 간단하고 이해하기 쉽다.적은 양의 데이터일 경우 보이지 않는 영역도 미리 렌더링을 해서 렌더링에서 딜레이가 없다.단점여러 형태의 사용자 정의 스크롤과 스크롤 효과를 만들기 쉽지 않다. (ScrollController를 이용해서 직접 개발해야 할 것)데이터양이 많고 복잡하고 비용이 큰 UI를 불러오는 경우 짧은 순간 Jan..
문제https://www.acmicpc.net/problem/4358 문제 아이디어문제 자체는 맵에 종 별로 카운팅해서 -> 정렬 -> 출력입니다. 그런데 조건이 조금 까다로운 부분이 있습니다.# 4358. 생태학# https://www.acmicpc.net/problem/4358import sysinput = sys.stdin.readlinetrees = {}count = 0while True: tree = input().rstrip() if tree == '': break trees[tree] = trees.get(tree, 0) + 1 count += 1 sortedTree = sorted(trees)for name in sortedTree: pri..
시작하기 전에사실 Clean Architecture 구조를 설계한 것을 보면 정석적인 구조를 바탕으로 굉장히 다양한 형태로 구현이 되어 있습니다. 패키지로만 분리되어 있는 경우도 있고, 일부만 모듈로 따로 분리하는 경우도 있는데, 모듈 (혹은 패키지) 간 의존성만 떼어내고 관리할 수 있다면 사실 어떤 구조든 맞다고 생각합니다. (그래서 제가 만든 구조도 틀리지 않다고 생각합니다.. 아마도..) 일단 기본 전제는 아래와 같이 잡았습니다.무슨 일이 있어도 presentation 레이어는 data 레이어를 참조할 수 없어야하며, domain 레이어만을 참조할 것무슨 일이 있어도 data 레이어는 presentation 레이어에 접근할 수 없어야하며, domain 레이어만을 참조할 것그러기 위해 presenta..
문제https://www.acmicpc.net/problem/11501 문제 아이디어1581547836 위와 같이 1, 5, 8, 15, 4, 7, 2, 3, 2 가 있다고 생각해 봅시다. 여기서 최대로 팔아먹으려면 최대한 큰 비용일 때 팔아야 되는데, 예를 들어 맨 처음 1, 5, 8 은 15일 때 가장 비싸게 팔릴 것입니다.15는 언제 팔아도 비쌀 수가 없죠. 자신이 가장 비싸거든요. 안 사는게 이득입니다.4와 7은 8일 때 가장 비싸게 팔립니다.8은 해봐야 자기 자신일 때 밖에 없습니다. 역시 안 사는게 이득입니다.3은 6일 때 가장 비싸게 팔립니다.6도 안 사는게 이득입니다.즉 주식을 산 시점부터 뒤를 탐색하면서 가장 비쌀 때 파는게 이득이라는 얘긴데, 위의 표를 보고 가장 이..
-
[Flutter] Android 14 - WebView가 하얗게 나온다?
글을 시작하기 전에, 찾은 자료와 코드를 보고 예측한 수준이기 때문에 추측이 완전히 틀렸다거나 약간 안 맞는다거나 할 수 있습니다. 그런 부분이 있다면 댓글로 알려주세요. 빠르게 수정하겠습니다..! Flutter에서 WebView가 안보여요Flutter의 WebView를 사용하다가 Android 13, Android 14 버전 (대략 Android 13부터 였던 것 같습니다.) 이후부터 이상한 현상이 있었습니다. 웹뷰를 가지고 있는 앱을 Background 상태로 내려놓고 다른 앱을 사용하다가, 다시 앱으로 돌아오게 되면 화면이 사라지는 현상이었습니다. 심지어 웹뷰 자체가 사라졌다기보다, 클릭을 하면 반응은 합니다. 디버깅을 해보면 다른 주소로 이동한다거나, 웹뷰 내의 컨텐츠는 클릭이 되고, 스크..
-
[Android] 프로젝트에 Android의 Hilt를 사용해보자
Hilt?Android에서 가장 유명한 의존성 주입 (Dependency Injection) 라이브러리입니다. 이전에 있던 Dagger를 기반으로 만들어서 사용법 및 작동 방식도 굉장히 유사한데, 원래 Dagger가 Android를 타겟으로 만든 라이브러리가 아니다보니까 환경 구축 부담 + 러닝 커브 비용 부담 때문에 쓴소리를 많이 먹었다고 합니다. 그래서 좀 더 환경을 구축하기 쉽고 이해하기도 쉬운 Koin을 사용하는 경우도 많았는데요. 그래서 구글이 Android에서 사용하기 편하라고 만든 것이 Hilt입니다. Dagger 기반으로 만들다보니까 비슷한 점도 많고 혼합해서 쓰기도 해서 그냥 Dagger Hilt라고 말하곤 합니다. Hilt 환경 세팅일단 환경 세팅을 해줍시다. 환경을 맞추지 않는다..
-
[Flutter] iOS 17부터 InAppWebView 웹 디버깅이 되지 않아요
오늘은 조금 짧막한 글이 될 것 같네요. 특별한 기술적인 내용이라기보다 겪었던 이슈에 대한 정리여서, 슈욱하고 끝날 것 같습니다.발단의 배경Flutter에는 내부 라이브러리인 flutter_webview와 함께 많이 사용하는 InAppWebView라는 라이브러리가 존재합니다. 비록 Flutter 유저가 만든 비공식 라이브러리지만 퀄리티만큼은 flutter_webview에 버금가기 때문에 많이 사용하는 라이브러리입니다. flutter_inappwebview/flutter_inappwebview_ios/ios/Classes/InAppWebView/InAppWebView.swift at master · pichillilorenzo/flutter_iA Flutter plugin that allows..
-
[Flutter] Flutter의 onStart, onStop, onResume, onPause
Flutter의 생명 주기Flutter의 생명 주기 (lifecycle)은 Android의 Activity의 생명 주기와 다소 상이하게 동작합니다. 당연한 것이지만 Flutter의 위젯은 Android의 View 기반이므로 Activity의 하위 컴포넌트이니까 Activity보다 늦게 나타나고 먼저 사라지게 됩니다. 그렇기 때문에 Activity가 create 돼서야 비로소 위젯이 그려질 수 있습니다. Flutter의 위젯에는 StatelessWidget과 StatefulWidget이 존재하는데, StatelessWidget일 경우엔 독자적인 생명 주기가 존재하지는 않고 부모 위젯이 사라지면 같이 사라지게 됩니다. 이에 반해 StatefulWidget은 독자적인 상태와 생명 주기를 가지고 특정 작업이..
-
[Android] Android 14: Broadcast Receiver와 Foreground Service 유형 정책 변경
배경기존에 Broadcast Receiver와 Foreground Service를 사용하는 앱이라면 신경 써주어야 하는 정책적인 변경점이 하나 생겼는데요. 최근에 Android 14가 나오고 SDK가 34 이상으로 올라감에 따라 해당 버전 값으로 올리게 되면 정책이 변경됨에 따라 처리해주어야 할 것이 많아졌습니다. 기존에는 권한 정도만 하나 올려주고, 버전 별로 사용에 다른 분기 처리 정도만 해주면 되었지만, 이게 뭔가 좀 더 바뀌었습니다. 만약 아래와 같이 추가 선언을 하지 않는다? Broadcast Receiver의 경우 이제 아래와 같은 Exception이 발생하면서 앱이 죽어버리고 Foreground Service의 경우 그냥 서비스가 실행이 되지 않습니다...java.lang.SecurityEx..