전체 글
data class 디컴파일
data class 디컴파일
2025.04.27배경최근에 팀원분이 버그를 해결해서 pr을 올려주셨다.기존 코드는 equals 메서드를 직접 오버라이드 해서 일부 필드만 비교하는 형태였는데 모든 필드를 비교하도록 수정해주셨다. 정상 동작은 확인했으나 "data class에서 자동으로 오버라이드해주는 equals로는 해결 안 되나?"라는 생각이 들었다.자동 제공을 해주는 것만 알았지 구체적으로 어떻게 동작하는지까진 확인을 해본 적이 없었다. 결론그래서 직접 디컴파일을 해봤는데 data class는 모든 필드에 대해 동등성을 비교하는 방식으로 동작하고 있었다.이 점을 리뷰로 남겼고, 역할이 겹치므로 수정해주셨던 코드를 삭제하는 방향으로 개선을 해냈다. 추가로 hashCode에 대한 오버라이드 코드도 삭제도 같이 해주셨는데, 검색을 해보니 그 이유는 h..
디자인 시스템에 회의적이었다가 필요성을 느끼게 된 계기
디자인 시스템에 회의적이었다가 필요성을 느끼게 된 계기
2025.03.07디자인 시스템의 필요성을 못 느꼈는데 최근 들어 많이 느끼고 있어 정리를 해본다. 디자인 시스템에 회의적이었던 나전 회사에선 웹뷰 비중이 커서 앱 단에서 적용할 디자인 시스템이랄 게 없었다. 앱바나 바텀시트 등을 컴포넌트화 해서 쓰는 정도였다. 디프만에서 했던 사이드 프로젝트에선 디자인 팀원들이 엄청 작은 단위까지 디자인 시스템을 만들어줬는데 다 만들기엔 시간이 너무 오래 걸릴 것 같아서 자주 쓰일 것 같은 몇개만 컴포넌트화 해서 썼었다 이렇게 처음 해보고는 "좋긴 한데 만드는 시간을 고려하면 배보다 배꼽이 더 큰 거 아닌가?"라는 생각이 들었다. 그래서 디자인 시스템에 회의적이었고 지금 회사에 들어오고 나서도 "정말 효용이 있는 것이 맞는가? 전체적으로 보면 오히려 생산성이 떨어진 결과가 나올 수 있지..
6년만에 여행, 일본을 다녀오다
6년만에 여행, 일본을 다녀오다
2025.03.07예전엔 여행을 다녀오면 당일 느꼈던 감정을 까먹지 않으려 바로 기록을 남기곤 했는데 정신이 너무 없었나봐요. 이제야 글을 씁니다. 첫날도톤보리 출발 한 시간 전쯤 도착하면 되겠지 싶었는데 간발의 차이로 공항 버스를 놓쳤습니다. 비행기를 못 탈 수도 있겠단 생각에 급하게 택시를 탔고 6만원을 냈습니다 ㅎㅎ. 탑승 수속 마감까지 10분 정도 남은 시점에 포켓 와이파이 대여랑 환전까지 하느라 엄청 뛰어다녔어요. 우여곡절 끝에 일본에 도착했는데 곧 멸망할 것처럼 하늘이 어둑했습니다. 난바로 이동하는 법도 몰라서 한참을 헤매다 결국 도착했고, 지도로 보니 옆에 물길이 있길래 따라가보니 그 유명한 도톤보리였습니다. 거리에서 멜로디언으로 인생의 회전목마를 연주하시던 분이 계셨는데 바로 앞에서 한 남녀가 서로 손 잡고..
첫 ANR을 만들었다.
첫 ANR을 만들었다.
2025.02.23배경작년에 어느 한 회사의 면접에서 "ANR을 모니터링 및 대응하는 본인만의 노하우가 있나요?"라는 질문을 받았었다. 그동안 개발하면서 한 번도 ANR을 만들어본 적이 없는데 얼마전에 처음으로 만들어봤다. 파베 crashlytics에 집계가 됐고 마지막으로 찍힌 이벤트와 로그를 보면서 추적했다. ANR이라는 것 자체가 메인 스레드 블락을 암시하기 때문에 어떤 게 문제가 됐을지 추려보는 건 어렵지 않았다. 대응"사용자의 디바이스 성능이 너무 떨어지는 건 아닐까?" 싶었는데 거의 최신 기종이라 이건 아닌 것 같았고 시간복잡도가 큰 로직이 메인 스레드에서 돌고 있어서 발생한 것으로 파악했다. 해시맵을 사용해서 로직의 시간복잡도를 n^2 -> n으로 개선했고 Dispatcher.Default에서 돌려주는 것으..
컴포즈 - 1장 컴포즈 앱 첫 빌드
컴포즈 - 1장 컴포즈 앱 첫 빌드
2025.01.19Row() 함수는 modifier라는 매개변수를 받는다. modifier는 젯팩 컴포즈의 핵심 기술로 컴포저블 함수의 외형과 행위에 영향을 준다. 3장에서 자세히 다룬다. Recomposition : 컴포저블 함수를 다시 그리는 것. MutableState 타입의 값을 변경하면 컴포저블 함수는 다시 그려지거나 다시 채색된다. Box()는 한 개 이상의 자식 컴포저블 함수를 포함할 수 있다. remember, mutableStateOf는 모두 상태를 생성하고 관리하는 데 매우 중요한 역할을 한다. 컴포저블 함수가 상태를 갖는다면 상태가 변경될 경우 컴포저블 함수는 재구성된다. mutableStatesStateOf()를 사용해 상태를 생성하고 remember를 사용해 상태를 기억한다. 그리고 상태를 다른 ..
2년차에 들어서는 1년차의 회고
2년차에 들어서는 1년차의 회고
2024.12.07회사에 들어온지 곧 2주가 되고 이번달이 지나면 2년차에 접어듭니다.'개발자취'라는 카테고리는 개발+발자취의 합성어로 개발자로서 제가 걸어온 길을 기록으로 남기는 공간입니다. 신입 생활코드 파악 어려움실무에서 몇년간 쌓여온 만큼 볼륨이 크고 depth가 깊은 코드가 많았는데 당시 신입이었던 저는 이런 경험이 처음이라 어려움을 느꼈습니다.xml에 렌더링 프리뷰가 없는 경우엔 어떤 뷰인지 바로 파악이 안 돼서 헤맸던 기억도 납니다. 그리고 자기가 작성한 코드도 몇달 지나면 기억이 잘 안 나는데 주요 로직들이 함수가 너무 길게 작성돼있어서 큰 맥락을 바로 파악할 수가 없었고 각 잡고 뜯어봐야 했었습니다. 함수 분리에 대한 필요성을 크게 느끼기도 했습니다. 업무 생산성과 커뮤니케이션에 대한 고민또 저는 디버깅..