전체 글 227

Coil이 항상 옳을까? Coil vs Glide

왜 이 주제를 선택했을까? 얼마전 당근에 다니고 계시는 선배님과 잠깐 전화로 이야기를 나눌 일이 있었다. 내 이력서를 보시고 다양한 코멘트 들을 해주셨는데 그 중 “내가 사용하는 기술에 대한 명확한 근거가 있어야 한다”라는 내용이 있었다. 그 이야기를 듣고 생각해보니 난 그저 관습적으로 늘 쓰던 기술을 사용한 것 뿐이지 왜 그 기술을 사용 했는지에 대한 명확한 근거가 없었다. 그래서 내가 사용하는 기술과, 그 대체재를 찾아보고 명확한 근거를 수립하여 이후 프로젝트에서 사용할 기술을 정하고자 한다. 이번 글에서 비교해볼 주제는 “이미지 로딩 라이브러리”이다. Coil이란? Coil은 Kotlin Coroutines로 만들어진 Android 백엔드 이미지 로딩 라이브러리로, Cououtine Image Lo..

RecyclerView와 SnapHelper - SnapHelper 커스텀

아래 두 동영상의 차이점이 뭘까? 왼쪽은 각 항목들이 호롤롤로롤로로 힘없이 넘어간다. 반면 오른쪽 동영상은 한칸씩 딱! 딱! 맞춰서 넘어간다. 이걸 구현하기 위해서 대부분은 ViewPager를 사용할 것이다. 이 상황에서는 맞는 방법이다. 하지만 이런 UI라면? Grid처럼 한 페이지에 여러 값이 존재하고, 그게 한칸씩 딱딱 맞춰서 넘어가야한다. 그리고 중요한점. 가운데 정렬이 아닌, 왼쪽 정렬이다 이거땜에 개빡쳤었다. 💡 이럴때는 ViewPager를 쓰는것도 나쁘지 않지만, RecyclerView도 활용해보자. 왜 굳이 ViewPager를 안쓰고 RecyclerView를 쓸까? 구현하기가 너무 귀찮았다그래서 RecyclerView를 Grid레이아웃으로 작성하고, Custom해서 VIewPager효과를 ..

Exception과 runCatching

Exception이란? 쉽게 말해서 error다. 제일 흔한 예시로 NullPointerException, ArrayIndexOutOfBoundsException 등등이 있을 것이다. 그럼 exception은 발생하면 안되는 걸까? 물론 정상적으로 작성된 코드에서는 발생하면 안되는게 맞다. 하지만, 개발자가 의도적으로 exception을 발생시킬 때가 있다. 왜 발생시킬까? 개발자가 의도하지 못한 상황이 발생하거나, 안드로이드 앱이 종료되는 것을 막기 위해 의도적으로 에러를 발생시켜 핸들링 하기 위해서로 알고있다. 틀렸거나, 더 명확한 이유가 있다면 댓글로 알려주세용 ㅎㅎ 어떻게 발생시킬까? throw라는 것을 활용해서 의도적으로 exception을 발생시킨다. private fun getUserInfo..

ITalk Day - 카카오스타일 윤상민 CTO

대학교에서 카카오스타일의 윤상민 CTO를 초청하여 강연을 진행했다. 강연의 주제는 "개발자로 살아가기"였다. 개발자로 살아"남기"가 아닌 살아"가기"인 이유는 자신의 과정에 빗대어 개발자로 살아가기 위한 가치관과 팁들을 아낌없이 나눠주시는 강연이었기 때문이다. 강의실에 입장하는데 커피랑 과자도 주더라. 맛있게 먹으면서 들었다 ㅋㅋ 많은 종류의 내용을 말씀해 주셨지만, 나에게 도움이 된 내용은 아래와 같다. 단, 아래 내용은 지극히 윤상민 CTO의 개인적인 의견일뿐, 통용되는 정답은 아니다. 나 또한 선택적으로 나에게 적용할 예정이다. 이력서 1. 회사마다 선호하는게 다르다 2. 회사 맞춤형 이력서를 작성하자 - 서비스 사용 소감, 해당 회사 사용 기술스텍과 관련된 기술을 작성하자 3. 읽는 사람 입장에서..

[Jetpack Compose] Button 사용법의 모든것

Button 말 그대로 버튼을 화면에 나타내고자 할 때 사용된다. Button(onClick = { /*TODO*/ }) { Text(text = "Button") } 어우 많다. 하나씩 가보자. onClick 버튼을 클릭했을 때 발생시킬 액션이다. api를 호출시킬 수도 있고, Toast를 띄울 수도 있고 페이지를 이동시킬 수도 있다. 그냥 버튼 클릭시 실행시키고 싶은 모든것을 넣으면 된다. enabled Button( onClick = { /*TODO*/ }, enabled = false ) { Text(text = "Button") } 버튼을 활성화시킬지 여부를 나타낸다. 기본값은 true이고, false로 설정하면 버튼이 클릭되지 않는다. 그럼 이건 어떨때 쓸까? 난 최근에 썼을때 입력받은 정보..

[Jetpack Compose] Text 사용법의 모든것

Text 말 그대로 텍스트를 화면에 나타내고자 할 때 사용된다. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { SOPTComposeStudyTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Text(text = "Hello World!") } } } } } Text도 Composable 함수이기 때문에 매개변수들을 살펴보자.오… 많다. 하나씩 하나씩 뽀개보자. text..

[Kotlin] Programmers Lv. 1 숫자 문자열과 영단어

https://school.programmers.co.kr/learn/courses/30/lessons/81301 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Code class Solution { fun solution(s: String): Int { val numList = listOf( Pair("zero", "0"), Pair("one", "1"), Pair("two", "2"), Pair("three", "3"), Pair("four", "4"), Pair("five", "5"), Pair("six", "6"), Pair("seven", "7"..

Programmers/Lv. 1 2023.09.26

[Kotlin] Programmers Lv. 1 시저 암호

https://school.programmers.co.kr/learn/courses/30/lessons/12926 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Code class Solution { /* fun isSmall(ch: Char) = ch in 'a'..'z' fun isBig(ch: Char) = ch in 'A'..'Z' fun solution(s: String, n: Int): String { var answer = "" s.forEach { var temp = ' ' if (isSmall(it)){ temp = it + n if (t..

Programmers/Lv. 1 2023.09.25

[Kotlin] Programmers Lv. 1 최소직사각형

https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Code import java.lang.Integer.max class Solution { fun solution(sizes: Array): Int { var maxNum = Int.MIN_VALUE var minNum = Int.MIN_VALUE sizes.forEach { var maxLocal: Int var minLocal: Int if (it.first() > it.last()){ max..

Programmers/Lv. 1 2023.09.24

[Kotlin] 백준 2252번 : 줄 세우기 <Gold 3>

https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net Code import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader import java.io.OutputStreamWriter import java.util.LinkedList import java.util.Queue import kotlin.ma..

Bakejoon/Gold 2023.09.23