전체 글

전체 글

    [Android] Dependency Injection이란? + Hilt

    들어가기 전 Clean Architecture를 공부하면서 '의존성' 낮추기, '결합도' 낮추기, '의존성' 주입, '의존성' 역전 등 지속적으로 의존성에 대한 내용이 언급되었다. 그래서 소프트웨어 설계에서 Dependency는 무엇을 의미하는지, 안드로이드에서는 이를 어떻게 적용할 수 있는지를 공부해보고자 한다. Dependency "A가 B를 의존한다." 라는 표현은 아래와 같은 뜻을 담고 있다. 의존대상 B가 변하면, 그것이 A에 영향을 미친다. - 이일민, 토비의 스프링 3.1, 에이콘(2012), p113 이런 의존관계를 UML의 표현을 빌려 A--->B로 표현할 수 있다. 이는 B의 기능이 추가나 변경되면 그 영향이 A에 미친다. B의 기능 추가나 변경이 A에 영향을 미치게되는 경우, B에게 ..

    [Android] 안드로이드 MaskFilter로 blur 효과 구현하기

    들어가기 전 엄빠도 어렸다 서비스를 만들면서 그림과같이 내가 답변을 하기 전에 상대가 답변을 할 경우 문답화면에서 상대 답변이 블러처리가 되어있는 디자인을 구현했어야 했다. 이 때 블러를 구현하기 위해서 사용했던 방법을 소개하고자 한다. Blur 효과 만들기 안드로이드 Paint BlurMaskFilter 사용 private fun setBlurText(isBlur: Boolean) { with(binding) { tvAnswerOther.setLayerType(View.LAYER_TYPE_SOFTWARE, null).apply { if (isBlur) tvAnswerOther.paint.maskFilter = BlurMaskFilter(16f, BlurMaskFilter.Blur.NORMAL) else..

    [Android] Clean Architecture + MVVM 패턴

    들어가기 전 안드로이드 프로젝트를 하면서 MVVM , Clean Architecture, Dependency injection etc... 이런 키워드들을 정말 많이 들었다. Sopt 처음 시작할 때 Clean Architecture를 적용한 프로젝트를 진행하고 싶다고 말할 정도로 나는 이 부분에 대한 공부를 하고싶었다. 이번 앱잼에서 MVVM 패턴을 적용했다는 점(Hilt (x))에서 반은 이뤘지만, 어떻게보면 왜 이렇게 사용하는지 조차 모르고 사용한 부분들이 많았다. 이번기회에 제대로 이해되지 않은 부분들도 다 이해하고 넘어가고자 이 포스팅을 작성한다. MVVM (Model - View - ViewModel) MVVM 패턴은 MVP 패턴에서 파생된 패턴으로 비즈니스 로직과 프레젠테이션 로직을 사용자 ..

    [Android] 알림 커스텀과 안드로이드 13 알림 권한 설정

    들어가기 전 이번 sopt 앱잼에서 FCM 알림을 담당하게 되면서, 알림 권한과 알림 커스텀에 대해 공부하게되었다. 1.안드로이드 13 알림권한 설정 이전까지는 안드로이드에서 알림을 표시할 때 권한이 없어도 개발자가 알아서 알림을 만들고 띄울 수 있었다. 하지만 이를 악용하는 사례(무분별한 광고알림)들이 많아지자 Android 8.0 (Oreo) 에서는 Notification Channel 을 도입시켰고, Android 13 (Tiramisu) 부터는 런타임 알림 권한 (POST_NOTIFICATIONS)이 추가되었다. 이제 안드로이드에서도 사용자에게 알림 권한을 요청하고, 사용자의 알림 허가를 받은 뒤에 알림을 표시할 수 있게된 것이다. 사용자의 알림 권한을 확인하고 권한을 요청하는 방법은 아래와 같다..

    [Film Festival] 영화 아카이빙 홈페이지 디자인

    [Film Festival] 나의 영화 취향 아카이빙을 주제로 영화제 컨셉의 홈페이지를 제작했다. 기간: 2021.10 ~ 2021.10.27 제작도구: PhotoShop 맨 처음 뜨는 페이지로 오른쪽 상단에는 나의 생일을 왼쪽 상단에는 이 프로젝트가 마무리되는 날짜를 적었다. 첫번째 페이지의 영화는 내가 가장 좋아하는 영화 싱스트리트이다. 이전에도 비긴어게인,원스 등 음악영화를 좋아하긴 했지만 Singstreet는 내가 좋아하는 밴드 음악 + 불완전한 캐릭터들이 성장하는 과정이 너무 좋아서 절대 잊을 수가 없다. (좋아하고 보니 전부 존카니 감독의 작품이다.) 두번째는 월플라워이다. (난 에즈라밀러가 그렇게 될 줄 몰랐다.. ) 원본 사진에서 초록색 벽돌 배경을 따서 전체로 만드는데 꽤 노력을 했던거같..

    [BOJ/C++] 10974번 모든 순열

    분류 브루트포스 알고리즘, 백트래킹 문제 설명 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다. 출력 첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다. 풀이 dfs를 이용해서 점차 깊게 확인 후 더이상 가지 못할때 값을 출력함. 아래 사진 참고 코드 #include #include using namespace std; int visited[9], N; vector v; void dfs() { if (v.size() == N) { for (int i = 0; i < v.size(); i++) { cout

    [BOJ/C++] 2231번 분해합

    문제 설명 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 분류 브루트포스 알고리즘 •Exhaustive Search (완전탐색) •한 배열에 3..

    [BOJ/C++] 1012번 유기농 배추 : BFS

    문제 설명 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있는 것이다. 한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어 놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들이 ..

    [BOJ/C++] 1931번 회의실 배정 : 그리디

    문제 설명 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다..

    [바킹독 알고리즘] 0x10강:다이나믹 프로그래밍

    다이나믹 프로그래밍 (Dynamic Programming, DP) : 여러 개의 하위 문제를 먼저 푼 후 그 결과를 쌓아올려 주어진 문제를 해결하는 알고리즘 위 사진과 같이 피보나치 수열을 DP를 이용해서 배열로 문제를 풀 수 있다.\ 배열에 하위 값들에 대한 정보를 저장하고 있으면, 상위 문제를 풀 때 배열에 저장된 값을 이용해서 풀 수 있기 때문에 재귀보다 훨씬 수행시간이 줄어든다. DP를 푸는 과정 1. 테이블 정의하기 2. 점화식 찾기 3. 초기값 정하기

    [바킹독 알고리즘] 0x0A강:DFS in 다차원 배열

    DFS: 다차원 배열에서 각 칸을 방문할 때 깊이를 우선으로 방문하는 알고리즘 사진만으로 이해가 어렵다면 바킹독 알고리즘 영상을 직접 보면 이해가 더욱 쉬울 것이다. 정리 1. 시작하는 칸을 스택에 넣고 방문했다는 표시를 남김 2. 스택에서 원소를 꺼내어 그 칸과 상후좌우로 인접한 칸에 대해 3번을 진행 3. 해당 칸을 이전에 방문했다면 아무 것도 하지 않고, 처음으로 방문했다면 방문표시를 남기고 해당 칸을 스택에 삽입 4. 스택이 빌 때 까지 2번을 반복 모든 칸이 스택에 1번씩 들어가므로 시간복잡도는 칸이 N개 일 때 O(N) DFS 구현 코드 #include using namespace std; #define X first #define Y second int board[502][502] = {{1..