본문 바로가기
안드로이드

안드로이드 노트

by algosketch 2023. 7. 27.

아무거나 막 적는 곳

 

안드로이드 에뮬레이터에서 네트워크를 차단하는 방법

 계기 : 넥스터즈 4주차 UT에서 실기기 테스트 중 네트워크가 연결되어 있지 않았을 때 발생하는 크래시 발견!
생각 : 어떻게 에뮬레이터에서 재현해야 할까? 에뮬레이터에서 인터넷을 의도적으로 끌 수 있지 않을까?
검색어 : how to disable internet in android emulator
결론 : 그냥 에뮬레이터에서 데이터랑 와이파이를 끄면 된다.
회고 : 에뮬레이터가 컴퓨터에서 돌아가니까 무의식 중에 컴퓨터 네트워크를 끊어야 하나 생각했나보다 ㅋㅋㅋㅋㅋㅋ

 

재귀로 작성한 UI 반복으로 변경

이런 형태의 UI였다. 왜 그런 바보같은 짓은 했는지는 모르겠지만 처음엔 이 UI를 재귀로 작성했다. 참고로 UI는 Compose로 개발하고 있었다. 첫 번째 접근은 padding값을 음수로 주는 것이었으나 적용되지 않았고, 두 번째 접근이 재귀였다. 사실 그냥 재귀가 쓰고 싶었을 지도...? 코드는 놀랍게도 정상 동작했다.(사실 놀랍진 않다.) 성능 이슈는 생각해볼 만하지만 일단은 빠르게 다음 기능을 개발하기 위해 넘어갔다.

큰 차이는 없겠거니...

재귀로 작성한 UI는 이랬다. 성능은 둘째치고서라도 flat한 자료구조를 표현하는데 재귀를 사용하는 게 마음에 들지 않았다. 왜 그런 바보같은 생각을 했는지는 모르겠지만 스택을 쌓으려면 재귀로 쌓아야 한다고 생각했다... 그런데 우리 팀 iOS 개발자와 얘기하다보니 역시나 재귀 안 쓰는 게 낫다고 하셨는데, 그때 갑자기 깨달았다. 사실 재귀 안 쓰고도 쉽게 구현되는 UI라는 걸... 코드 작성할 때도 반복문을 고려했었는데 왜 이런 닫힌 사고를 하게 된 건지 모르겠다.

추가로 리스트의 개수가 많아져도 리스트의 끝이 화면 중간까지는 스크롤 되도록 만들어야 했다. 원래 접근 방법은 BottomSheet를 이용하는 거였다. 지금도 BottomSheet로 구현하는 게 더 적절하지 않을까 하는 생각이 들지만 개발 기간을 맞추려면 더 쉬운 방법이 필요했다. 무슨 BottomSheet 적용하는 데 엄살이냐 싶겠지만 서버 API가 올라오고 안드로이드 심사까지 2주일이 채 안 걸렸다.

혹시나 해서 "이거 iOS에서는 어떻게 구현했어요?" 라고 물어보고 30초만에 해결 방법은 얻었다.(여기서 등장한 iOS 개발자는 아까 말했던 인물과 다른 인물이다.) iOS에서는 정확한 단어는 기억이 안 나지만 content padding을 주어 해결했다고 한다. 역시 똑똑한 우리 팀원들... 굿 아이디어!

바뀐 코드는 위와 같다.

 

23.08.08 첨언

Modifier의 padding은 음수 값을 줄 수 없지만 LazyColumn의 파라미터로 spacedBy 값을 음수로 줄 수 있다.