전체 글
-
[안드로이드] Fragment 바인딩 메모리 누수카테고리 없음 2024. 4. 23. 09:29
메모리 누수? Fragment에서 바인딩을 사용 시 View보다 Lifecycle이 길어서 발생하는 문제이다. 아래처럼 코드를 짜면 Fragment가 사라질 때 제때 가비지컬렉터에 잡히지 않아서 메모리 누수가 발생하게 된다. class ContactDetailFragment : Fragment() { private lateinit var binding: FragmentContactDetailBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { binding = FragmentContactDetailBinding.inflate(inflater,..
-
[코틀린] 가중치 랜덤카테고리 없음 2024. 4. 19. 21:11
Map에서 key는 제네릭, value는 Double로 받아서 가중치를 기반으로 key를 뽑는 구문이다. import kotlin.math.ln import kotlin.random.Random private val random = Random fun Map.random(): T { val entry = entries.minByOrNull { -ln(random.nextDouble()) / it.value } return entry?.key ?: throw IllegalArgumentException() }
-
[(코틀린)알고리즘] 소수 판별카테고리 없음 2024. 4. 18. 12:35
사용 이유 n이 소수인지 판별하기 위해 사용합니다. 시간 복잡도에 따라서 다르게 구현할 수 있습니다. 일반적인 방법 2부터 n까지 모든 수를 체크하기 때문에 시간 복잡도 O(n)이 나오게 된다. fun isPrime(n: Int): Boolean { if (n < 2) return false // 소수는 1과 자기 자신만 약수로 가지기 때문에 // 만약 나누어 떨어지면 소수가 아니게 된다. return (2 until n).none { n % it == 0 } } 위 코드에서 향상된 방법 시간 복잡도를 줄이기 위해 굳이 n까지 갈 필요 없이 루트 n 까지만 체크하면 된다. 12를 예시로 들어보겠다. (곱해서 12가 되는 수는 아래만큼 있다.) 1 * 12 2 * 6 3 * 4 4 * 3 6 * 2 12 ..
-
[패턴] 퍼사드(Facade) 패턴카테고리 없음 2024. 4. 17. 09:43
Facade 패턴이란? 여러 서브 클래스들의 기능을 한 클래스에 모아 담당하도록 만든 패턴이다. 장점 서브 클래스 의존을 감소시켜주며 가독성이 상승하고 만약 필요한 경우 서브 클래스를 직접 참조할 수 있다. 사용법 (전에 작성했던 일부 코드를 가져왔다) 서브 클래스인 TownyRegistry와 EconomyService를 TownyService에서 참조하여 사용하도록 했다. 또한 buyTowny를 메서드로 만들었기 때문에 재사용성이 높아졌다. @Service class TownyService( private val townyRegistry: TownyRegistry, private val economyService: EconomyService ) { fun buyTowny(player: Player): ..
-
[안드로이드] RecyclerView에서 아이템 삭제 시 position 문제카테고리 없음 2024. 4. 16. 11:37
문제 아이템 삭제 시 원하는 아이템이 아닌 다른 position의 아이템이 제거되었다. 해결법 holder.adapterPosition를 사용하니 정확한 어탭터 위치를 가져올 수 있었다. (단순히 position만 넘겨서 추가/제거를 할 때 화면에서 보이는 것과 Adpater의 내용이 맞지 않을 수 있다.) class ProductAdapter( private val products: MutableList, private val clickScope: (Int, Product) -> Unit, private val longClickScope: (Int, Product) -> Unit ) : RecyclerView.Adapter() { private lateinit var parrentContext: Con..
-
[코틀린] DecimalFormat을 이용한 3자리마다 콤마 넣기카테고리 없음 2024. 4. 15. 18:44
사용법 DecimalFormat을 이용하여 확장함수를 만들어 숫자 클래스에서 사용할 수 있게 만들어주었다. #,###으로 3자리마다 콤마를 넣어주었고 .###으로 3자리의 소수점만 보이도록 하였다. private val decimalFormat = DecimalFormat("#,###.###") internal fun Double.applyComma(): String = decimalFormat.format(this) internal fun Long.applyComma(): String = decimalFormat.format(this) internal fun Int.applyComma(): String = decimalFormat.format(this) 실행결과