포스팅 썸네일 이미지

학습/CS

If I can use if, when to use when

Kotlin 공식문서에서도 if 대신 when을 사용할 것을 권장하고 있습니다. 그런데 왜 if 대신 when을 사용해야 하는지 아시나요? Prefer using when if there are three or more options. https://kotlinlang.org/docs/coding-conventions.html#if-versus-when Coding conventions | Kotlin kotlinlang.org Kotlin의 when은 Java의 switch 문으로 변환된다. Kotlin에서 when을 사용하는 코드는 Java의 switch 문으로 변환됩니다. 직접 확인해봅시다. 아래와 같이 사용자가 입력한 값에 따라 Grade를 반환하는 함수가 있습니다. enum class Grade..

2024.03.06 게시됨

포스팅 썸네일 이미지

학습/CS

Sealed class vs Sealed interface vs Enum

Sealed classsealed class는 같은 모듈의 같은 패키지에서만 상속할 수 있는 클래스로, 유한한 개수의 subclass로 구성된 closed type hierarchy를 제공하는 클래스다. 또한 상속은 런타임이 아닌 컴파일 타임에만 허용된다. 그래서 third-party 코드에서 sealed class를 상속하는 클래스를 정의할 수 없다. abstract class와 대비되는 것을 알 수 있다. 아래와 같이 MyResult가 정의되어 있는 패키지와 다른 a 패키지에 정의되어 있는 MyResponse 클래스가 MyResult Sealed class를 상속하지 못하는 것을 볼 수 있다. Inheritor of sealed class or interface declared in packa..

2024.03.05 게시됨

포스팅 썸네일 이미지

학습

Android에서 ConstraintLayout은 왜 사용하는 걸까

이것은 Android가 view를 그리는 과정과 관련된 것으로, Android는 measure pass, layout pass 두 과정을 통해 UI를 설정한다. measure pass는 view가 자신의 크기를 계산하고 설정하는 과정이고, layout pass는 view가 속한 ViewGroup이 view가 측정한 값에 따라 View의 위치를 설정 하는 과정이다. 보통은 이 과정이 짧은 시간 내에 완료되지만, 런타임에 View를 추가, 삭제한다던가(대표적인 예로 RecyclerView), View의 텍스트가 변경되어 크기를 다시 측정해야 하는 경우 비교적 오래 걸린다. 하지만 이것 만으로는 ANR이 발생할만큼 문제가 되지는 않는다. 공식문서에서 추천하는 Layout ViewGroup인 Layout이 다른..

2024.03.03 게시됨

포스팅 썸네일 이미지

학습

Android에서 View는 어떻게 그려질까? - 1

학습하게 된 이유 TextView에는 marquee라는 속성이 있다. 이것을 이용하면 텍스트가 TextView 영역을 계속 움직이도록 할 수 있다. 그런데 시작과 끝이 완전히 이어지지 않고 약간의 공백이 있는 것을 볼 수 있다. 이 공간을 늘리거나 줄이는 attribute는 TextView가 제공하지 않는다. 해당 공간을 줄일 수 있는 방법을 찾아보다가 아래 답변을 통해 TextView를 상속한 CustomView를 통해 줄일 수 있음을 알게됐다. https://stackoverflow.com/a/72749204/11722881 Android: How to remove end blank space from Textview with marquee I have created TextView with marq..

2024.02.28 게시됨

포스팅 썸네일 이미지

학습/CS

Kotlin에서 data class는 왜 사용할까

자바에서는 클래스를 선언할 때, equals, hashCode, toString과 같은 메소드를 직접 선언해야 한다. 반면 코틀린에서는 컴파일러가 컴파일 단계에서 자동으로 생성해준다. 컴파일러가 자동으로 생성해주는 위 메소드들을 override 해야 되는 경우는 언제일까? toString 기본 제공되는 toString 메소드에 의해 표현되는 문자열은 Client@ef32a8 과 같은 형식이다. 이 문자열을 클래스가 가지고 있는 데이터를 포함하는 의미있는 문자열로 변경하기 위해서 toString 메소드를 오버라이드해야 한다. class Client(val name: String, val postalCode: Int) { override fun toString(): String { return "Client..

2024.02.16 게시됨

포스팅 썸네일 이미지

학습

RecyclerView 공백 ViewHolder 문제

ConstraintLayout 내부에 ConstraintLayout을 topToBottom=parent 설정으로 숨겼다. 특정 버튼을 선택하면 이 Constraintlayout의 Top 제약 변경해서 사용자에게 보이도록 구현했다. 제약을 update 하는 함수만 있고, delete 하는 함수는 없는데, UNSET은 기존에 설정된 제약 설정을 없애는 것과 동일한 효과를 준다. findViewById(R.id.lyric_view).updateLayoutParams { topToTop = binding.root.id topToBottom = ConstraintLayout.LayoutParams.UNSET } ConstraintLayout이 보일 때, 아래에서 올라오는 효과를 주기 위해 android:anima..

2024.02.14 게시됨

포스팅 썸네일 이미지

학습

Android에서 Retrofit은 왜 사용하는 걸까

REST란 무엇인가요즘의 웹 서버들은 REST라고 불리는 stateless web architecture를 이용해서 서비스를 제공한다. REST는 REpresentational State Transfer의 약자로, REST 아키텍처는 다음과 같은 원칙을 준수해야 한다.일관된 인터페이스(uniform Interface)- 서버가 전송하는 정보는 표준적인 형태여야 하고 일관된 형태여야 된다.- 클라이언트는 정보를 요청할 때, URI 형태를 이용한다.무상태(stateless)- 각 요청은 독립적이어야 한다. 서버는 클라이언트로부터의 요청을 처리하기 위해 과거에 그 클라이언트가 어떤 요청을 했는지를 알 필요가 없다.- 서비스 수준에서 state를 쓸 수 있으나, 서버가 이 state를 알 필요가 없다. 클라이언..

2024.02.08 게시됨

포스팅 썸네일 이미지

학습

Android popUpTo가 동작하지 않는 경우

Android Navigation Component에서 제공하는 popUpTo를 설정했음에도 불구하고, 뒤로가기를 눌렀을 때, 해당 Fragment로 이동하지 않는 경우가 발생했습니다. 원인 popUpTo로 설정한 Fragment가 backstack에 존재하지 않아, popUpTo가 동작하지 않았습니다. 이것은 RuntimeException으로 발생하지 않고, Logcat에서 I(info)로 표시됩니다. 아래 사진 Logcat 마지막에 destionation인 Fragment가 backstack에 존재하지 않기 때문에, 설정한 popUpTo가 무시되는 것을 알 수 있습니다. 아래 스택오버플로우 답변을 보고 MessageFragment가 backstack에서 지워지는지 확인해봐야겠다고 생각했했습니다. 그래..

2023.11.13 게시됨