본문 바로가기

분류 전체보기310

[Image Loader Library] Glide VS Coil 알아보자! Android를 사용하는 많은 분들은 이미지 로딩을 처리할 때 Glide를 사용할 것이라고 생각합니다. 그래서 오늘은 새로운 Coil에 대해 소개해보고자 합니다! 1. Coil은 뭐지?? Coil은 Coroutine Image Loader의 약자로 Kotlin Coroutine으로 만들어진 가벼운 Android 이미지 로딩 라이브러리입니다. 코일에서는 총 4가지 장점을 위주로 소개하고 있습니다. Fast Coil performs a number of optimizations including memory and disk caching, downsampling the image in memory, automatically pausing/cancelling requests, and more. 코일은 메모리 .. 2022. 12. 4.
[BOJ][Java] 백준 1406번: 에디터 문제 설명 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 있다. 이 편집기가 지원하는 명령어는 다음과 같다. L 커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨) D 커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨) B 커서 왼쪽에 있는 문자를 삭제함 (커서가 문장의 맨 앞이.. 2022. 11. 16.
[알고리즘] 이분 탐색 / 이진 탐색 (Binary Search) 이진탐색이란? 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 핵심 동작방식 이진탐색 알고리즘은 리스트의 중간 값과 비교하여 검색 값을 찾습니다. 중간값을 찾아야 하기 때문에 반드시 정렬된 배열에서만 사용할 수 있습니다. 동작 방식으로는 다음과 같습니다. 1. 배열의 중간 값을 가져옵니다. 2. 중간 값과 검색 값을 비교합니다. 1) 중간 값이 검색 값과 같다면 종료합니다 (mid = key) 2) 중간 값보다 검색 값이 크다면 기준 배열의 오른쪽 구간을 대상으로 탐색 합니다 (mid < key) 3) 중간 값보다 .. 2022. 10. 8.
[Android] AAC ViewModel 과 MVVM ViewModel MVVM ViewModel이란? MVVM 패턴 (Model - View - ViewModel)은 MVP 패턴에서 파생된 패턴입니다. MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하는 것입니다. 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하게 되면 테스트, 유지 보수, 재사용 측면에서 용이합니다. 기존의 MVP 패턴 (View - Presenter - Model)에서 View와 Presenter는 1:1 관계로 View에서 요청한 정보로 Model을 가공하여 View에 전달해줍니다. 즉 연결다리 역할을 하는 것입니다. 이러면 View와 Presenter 사이의 의존성이 높아져 문제가 발생합니다. 반대로 MVVM 패턴은 View 와 ViewModel 사이의 의존성이 없.. 2022. 9. 28.
[Android] Fragment에서 add()와 replace() 차이점 배경 보통 fragment를 사용할 때 replace를 주로 사용해왔는데 add()와 replace()가 과연 어떤 차이점이 있는지 체크해보기로 했습니다. add() 와 replace()의 차이 add()는 기존의 프래그먼트 위에 추가하는 것이고 replace()는 이전 프래그먼트들을 제거한 후에 새로운 프래그먼트를 추가한다는 차이점이 있습니다. 기존의 fragment 설정 Activity: onCreate() -> Fragment: onAttch - onCreate - onCreateView - onViewCreated - onViewStateRestored - onStart -> Activity: onStart - onResume A fragment에서 B fragment로 replace()할 경우 .. 2022. 9. 27.
[Android] Fragment 생명주기 Fragment란? 프래그먼트란 액티비티 내에 배치되어 사용자 인터페이스를 구성하는 안드로이드 구성요소 중 하나입니다. 액티비티 내의 일부 영역을 차지하여 화면을 구성할 수 있으며 독립적으로 동작할 수 있어 매우 유용합니다. CREATED: Fragment의 생명주기가 CREATED된 상태라면 이미 onAttach()를 통해 FragmentManager에 추가된 상태입니다. 이 상태에서 데이터를 초기화,복구하거나 저장된 상태를 불러옵니다. STARTED: Fragment 안의 View들이 표시되지만 '포커스'가 없으므로 사용자 입력에 응답할 수 없습니다. RESUMED: Activity와 마찬가지로 사용자와 Fragment가 상호작용하는 단계입니다. STARTED: Fragment의 onPause()를 .. 2022. 9. 27.
[알고리즘] 탐욕 알고리즘 (Greedy Algorithm) 탐욕 알고리즘 (Greedy Algorithm) 이란? 그리디 알고리즘은 말 그대로 선택의 순간마다 당장 눈 앞에 보이는 최적의 상황 만을 쫓아 최종적인 해답에 도달하는 방법입니다. 따라서 가장 직관적인 알고리즘 설계 패러다임 중 하나라고 볼 수 있습니다. 여러 경우 중 하나를 결정할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달합니다. 그리디는 현재도 최적이면서 최종적으로도 최적인 문제들입니다. 따라서 현재 상황에서 최적인 해를 찾으면 됩니다. 탐욕 알고리즘 문제를 해결하는 방법 1. 선택 절차 (Selection Procedure): 현재 상태에서의 최적의 해답을 선택한다. 2. 적절성 검사 (Feasibility Check): 선택된 해가 문제의 조.. 2022. 9. 27.
[Android] ViewPager2 - onAttachedToRecyclerView Error 배경 Fragment에 ViewPager2를 붙이고 다른화면으로 전환 후에 다시 돌아오면 에러가 발생하면서 앱이 터지는 현상을 발견했습니다. 에러 내용 java.lang.IllegalArgumentException at androidx.core.util.Preconditions.checkArgument(Preconditions.java:38) at androidx.viewpager2.adapter.FragmentStateAdapter.onAttachedToRecyclerView(FragmentStateAdapter.java:132) at androidx.recyclerview.widget.RecyclerView.setAdapterInternal(RecyclerView.java:1243) at androi.. 2022. 9. 21.
[프로그래머스][Java] 성격 유형 검사하기 - 2022 KAKAO TECH INTERNSHIP 문제 설명 나만의 카카오 성격 유형 검사지를 만들려고 합니다. 성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다. 지표 번호 성격 유형 1번 지표 라이언형(R), 튜브형(T) 2번 지표 콘형(C), 프로도형(F) 3번 지표 제이지형(J), 무지형(M) 4번 지표 어피치형(A), 네오형(N) 4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다. 검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다. 매우 비동의, 비동의, 약간 비동의, 모르겠음, 약간 동의, 동의, 매우 동의 각 질문은 1가지.. 2022. 9. 11.