오늘은 안드로이드 클린 아키텍처의 도메인 레이어에서 **홈 화면(Home Screen)**처럼 복잡하고 다양한 섹션들이 존재하는 화면을 어떻게 하면 효율적으로 관리할 수 있을지, 제가 이번 프로젝트에서 적용한 설계 노하우를 공유해 보려고 합니다.TVING이나 넷플릭스 같은 앱의 홈 화면은 배너, 인기 콘텐츠, 실시간 LIVE 등 수많은 섹션으로 구성되죠. 이걸 단순하게 나열하다 보면 코드가 금방 스파게티가 되기 쉬운데요. 이때 활용하기 좋은 Composite 패턴과 Sealed Interface 조합을 소개합니다! 1. 공통 규격 정의하기: HomeItem (Composite)홈 화면의 모든 섹션은 서로 모양이 다르지만, 공통점이 하나 있습니다. 바로 **'이미지가 있고, 클릭하면 어딘가로 이동한다'**..
폰트 저장하기폰트를 사용하려면 일단 해당 폰트 파일을 저장해야 합니다. 위치는 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도 안 사는게 이득입니다.즉 주식을 산 시점부터 뒤를 탐색하면서 가장 비쌀 때 파는게 이득이라는 얘긴데, 위의 표를 보고 가장 이..
Hilt?Android에서 가장 유명한 의존성 주입 (Dependency Injection) 라이브러리입니다. 이전에 있던 Dagger를 기반으로 만들어서 사용법 및 작동 방식도 굉장히 유사한데, 원래 Dagger가 Android를 타겟으로 만든 라이브러리가 아니다보니까 환경 구축 부담 + 러닝 커브 비용 부담 때문에 쓴소리를 많이 먹었다고 합니다. 그래서 좀 더 환경을 구축하기 쉽고 이해하기도 쉬운 Koin을 사용하는 경우도 많았는데요. 그래서 구글이 Android에서 사용하기 편하라고 만든 것이 Hilt입니다. Dagger 기반으로 만들다보니까 비슷한 점도 많고 혼합해서 쓰기도 해서 그냥 Dagger Hilt라고 말하곤 합니다. Hilt 환경 세팅일단 환경 세팅을 해줍시다. 환경을 맞추지 않는다..
문제https://www.acmicpc.net/problem/20006 문제 아이디어완전한 구현 문제입니다. 플레이어의 수 p(1 ≤ p ≤ 300)와 방의 정원 m(1 ≤ m ≤ 300) 면 300 * 300으로 해도 1초를 못 넘기고, 방에 플레이어를 넣을 때마다 계속 방의 상태를 체크해주면 됩니다. p, m = list(map(int, input().split()))roomList = []for i in range(p): player = list(map(str, input().split())) level = int(player[0]) enter = False for room in roomList: if room[0] >= level - 10 and room[0]
문제https://www.acmicpc.net/problem/22233 문제 아이디어간단한 맵&파싱 문제입니다. 사실 상 문제에서 하라는대로 하면 끝나긴 합니다.주의할 것은 10^5개이므로 키워드를 리스트에 담아서 키워드를 하나씩 찾아서 지워주면 10^5 * 10^5 이므로 시간 초과입니다. import sysinput = sys.stdin.readlineN, M = list(map(int, input().split()))keywords = {}for i in range(N): keywords[input().rstrip()] = 1for i in range(M): keywordList = list(input().rstrip().split(',')) for keyword in keywor..
문제https://www.acmicpc.net/problem/19637 문제 아이디어이 문제에서 시간 초과가 나는 경우는 보통 아래와 같습니다. 1. 그냥 O(N) (리스트 한바퀴 쭉 탐색하기) 로 탐색할 경우10^5 * 10^5 이므로 O(N)이면 무조건 시간 초과입니다. 그런데 문제 조건을 자세히 보면, if ~ else if ~ ... 요 조건이 오름차순으로 되어 있습니다. 정렬된 배열 (리스트) & O(N) 이 시간초과 = 이분 탐색 문제입니다. (무슨 공식도 아니고..) 2. 중복값을 제거하거나 맨 앞으로 이동시키려고 while문 안에서 중복값의 맨 앞 위치를 찾는 경우그런데 문제를 보면 값이 또 같은 값이 들어가 있는 경우가 있습니다. 이 경우에 중복값이 몇개 없으면 상관 없지만, 10^5개..
- Total
- Today
- Yesterday
- flutter sliverlist listview.builder 차이
- 안드로이드 compose font
- 4358 파이썬
- flutter sliver listview
- 백준 4358 파이썬 생태학
- 생태학 round
- 안드로이드 compose
- 백준 파이썬
- flutter customscrollview sliverlist
- 안드로이드 폰트 적용
- 4358 파이썬 round .4f
- 안드로이드 font weight
- 안드로이드 컴포즈 폰트 적용
- 백준 4358 생태학
- flutter sliverlist listview
- 백준 4358 파이썬
- 백준 4358
- 안드로이드 컴포즈 폰트
- 백준 생태학 파이썬
- 안드로이드 compose font 적용
- 안드로이드 font 파일 별 weight
- compose font weight 파일 별로 적용
- flutter get it multi module
- flutter get it module
- android compose font
- sealed 클래스
- 파이썬 eof
- flutter scrollview
- 4358 파이썬 틀렸습니다
- flutter singlechildscrollview customscrollview
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |