전체 글 429

Gson vs Kotlinx Serialization — 누락 키·null·추가 키·예외 한 번에 끝내기

문제 : Kotlinx Serialization 에서 MissingFieldException가 발생 하였다.DTO에 키가 있는데 Response에 key가 없어서 발생한 사례입니다.안드로이드 개발에서 많이 쓰이는 Gson과 Kotlinx Serialization, 두 라이브러리는 이 과정에서 눈에 띄는 차이를 보입니다.특히 JSON에 특정 키가 없거나 null 값이 올 때 어떻게 동작하는지 이해하는 것이 중요합니다.잘못하면 앱이 죽는(크래시) 원인이 될 수 있거든요.그리고, 추가키(정의되지 않는 키)가 내려와도 UnknownFieldException이 발생한다.왜 예외가 나나? (kotlinx.serialization의 규칙)필드가 빠지면: 기본값 없는 프로퍼티는 필수 → MissingFieldExcep..

[철권8] 파쿨람 파훼, 딜캐 목록 (시즌2)

파쿰람 파훼, 딜캐 목록안녕하세요 게임하면서 딜캐표도 같이 보려고 적습니다!상 : 상단중 : 중단하 : 하단숫자 : 상대 기술 막았을 때 딜캐 프레임 ** 12딜캐 중중 13, -12 ** 13딜캐 중중 15, -13 하 20, -13 중 14, -13 ** 14딜캐 상상중중 10, -14 중 22, -14 하 21, -14 중 18, -14 중 15, -14 하 19, -14 ** 15딜캐 이상 하 14, -15 중 20, -16 하 19, -23 추가 의견 있으시면 언제든 남겨주세요!도움이 되셨다면 프린스후운 구독 부탁드려요!! 프린스후운프린스후운 입니다! 종합게임의 꿈을 갖고 열심히 하고 있습니다.! 자주 소통하면서 친해져요! 모르는 것이 많아 많이 알려주세요! 게임은 : ..

게임 팁, 정보 2025.08.04

[Compose] Compose에서 클릭시 이전 데이터가 찍히는 문제

.pointerInput(Unit) 사용시 주의할 점클릭 작업 중에 onLongPress를 하기위해 pointerInput을 사용했었는데..! 문제가 발생 했다. 1. 문제 상황Compose에서 아래처럼 pointerInput 안에서 originalItem을 직접 참조하면리컴포즈 후에도 클릭 시 이전 데이터가 찍히는 현상이 발생할 수 있습니다.Box( modifier = Modifier.pointerInput(Unit) { detectTapGestures( onTap = { println("클릭 시 originalItem: $originalItem") // ⛔ 옛날 값 찍힘 } ) })2. 왜 이런 문제..

[철권8] 안나 파훼, 딜캐 목록 (시즌2)

안나 파훼, 딜캐 목록안녕하세요 게임하면서 딜캐표도 같이 보려고 적습니다!상 : 상단중 : 중단하 : 하단숫자 : 상대 기술 막았을 때 딜캐 프레임 ** 10딜캐  중 20, -10 ** 11딜캐 중 19, -11 ** 12딜캐 중상중 13, -12 중 15, -12 하 12, 0, -12** 13딜캐 중중 13, +9, -13 중 16, -13 중 20, -13** 14딜캐 중 20, -14 ** 15딜캐 이상 하 16, +5, -15 하특하 16, -16 하 20, -21 하 30, -26 하 24, -26  추가 의견 있으시면 언제든 남겨주세요!도움이 되셨다면 프린스후운 구독 부탁드려요!! 프린스후운프린스후운 입니다! 종합게임의 꿈을 갖고 열심히 하고 있습니다.! 자주 소통하면서 친해져요! 모르..

게임 팁, 정보 2025.04.03

[Compose] 스크롤 안에 (뷰 페이저 + 스크롤) 있는 경우

(Column + verticalScroll) 안에 (HorizontalPager + LazyVerticalGrid)가 들어가면 wrapHeight가 안 된다.앱이 죽는다..에러 : Vertically scrollable component was measured with an infinity maximum height constraints, which is disallowed. 그 경우 .heightIn(max = VIEWPAGER_MAX_HEIGHT.dp) 로 LazyVerticalGrid의 맥스 값을 지정 해주면해당 크기 만큼 설정이 된다. 문제점 : heightIn은 다음 페이지의 크기가 작아지면 wrap하게 된다. (각 페이지의 height)가 다를 수 있다.만약 1페이지의 크기와 2페이지의 크기..

[Compose] Scaffold: 내부 동작 원리와 UI 자동 조정 과정 분석

[Column + Scroll] 이나 lazyColumn 일 경우멀티 윈도우 앱 크기 줄였을 때 스크롤 끊기는 현상이 있었습니다.문제 재현 결론부터 말하자면 Scaffold로 해결 하였습니다. Scaffold란?Scaffold는 앱의 기본 UI 구조를 제공하는 컨테이너 컴포저블입니다.✔ topBar, bottomBar, floatingActionButton, drawerContent 등의 주요 UI 요소를 배치할 수 있도록 지원합니다.✔ contentPadding을 통해 콘텐츠 영역의 크기를 자동 조정하여, UI가 겹치거나 잘리는 문제를 방지합니다.✔ NestedScrollConnection을 활용해 내부 스크롤 이벤트 충돌을 방지하며, 시스템 UI(상태바, 네비게이션바)와의 겹침을 피하기 위해 Modi..

[Compose] 컴포즈 실전 내가 경험한 Tip !

mutableStateOf 사용시 유의할 점@Composable함수 내에서 mutableStateOf를 사용할 때, remember를 사용해야 한다.mutableStateOf 대신 mutableIntStateOf를 사용하는 것이 더 성능이 좋다 (린트 경고)Compose 매개변수 정렬 규칙필수 매개변수 (State 포함)이벤트 핸들러 (onClick, onChange 등)이벤트 핸들러는 “발생할 때”를 의미하기 때문에 현재형을 사용해야 함.modifier: Modifier = Modifier기본값을 가진 선택적 매개변수content: @Composable () -> Unit (Trailing Lambda, 선택적)예외 사항 (Trailing Lambda)Compose에서 onClick: () -> Uni..

[Compose] UI를 구성할 때 요소를 정렬하는 방법

Box, Row, Column, LazyColumn, LazyRow 기본 컨테이너에서 정렬 방법 1. Box- 자식 요소를 원하는 위치에 배치할 수 있는 컨테이너정렬 방법contentAlignment → 전체 자식 정렬Modifier.align() → 각 자식 개별 정렬Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center // 모든 자식 요소 기본 정렬) { Text( text = "이 텍스트는 오른쪽 상단!", modifier = Modifier.align(Alignment.TopEnd) // 개별 정렬 )}contentAlignment = Alignment.Center → ..

[Compose] LiveData vs StateFlow: Compose에서 어떤 것을 사용할까?

1. LiveData를 Compose에서 사용하는 방법LiveData는 Android의 UI 상태를 관리하는 기존 방식입니다.Compose에서는 observeAsState()를 사용하여 LiveData를 Compose 상태(State)로 변환할 수 있습니다.@Composablefun LiveDataExample(viewModel: MyViewModel) { val liveDataValue: String? by viewModel.myLiveData.observeAsState() Text(text = liveDataValue ?: "No data available")}📌 observeAsState()란?✔ LiveData를 State로 변환합니다.✔ LiveData의 값이 변경될 때마다 자동으로..

[Compose] Compose에서 key의 역할과 사용법

Compose에서 key의 역할과 사용법Compose에서 key는 컴포저블의 상태 유지 및 무효화 관리를 위한 중요한 개념입니다. 이를 올바르게 사용하면 효율적인 상태 관리와 UI 업데이트를 구현할 수 있습니다.  key의 역할과 사용하는 이유📌 key의 역할Compose의 재구성(Recomposition) 로직을 제어합니다.특정 값이 변경될 때 기존 상태를 무효화하고 새로운 상태를 초기화할 수 있습니다.📌 key가 상태에 미치는 영향 (상태 소멸 조건)key 값이 변경되면 기존 상태가 무효화되고 새로운 상태가 생성됩니다.새로운 객체가 생성되므로, 기존에 저장된 상태는 유지되지 않습니다.@Composablefun CounterWithKey(userId: String) { var count by ..