전체 글 230

MVI 를 찍먹해보자.

mvi 이야기는 한참전부터 나왔던거 같은데대충 아~ 이런게 있다더라 너 써봤니?하고 말았던 mvi 이제는 현업에서도 꽤 많이 사용하고 있다는 소식이 들린다.mvi 는 쉽게 개발해주는 라이브러리도 많이 쓰는거 같은데역시 튜닝의 끝은 순정이라고나는 기본 개념을 익히는 느낌으로 만들어볼까한다.이렇게 익히고나서 라이브러리를 쓰는게 편해지는거 같고 기분이 좋으니까 그래서 mvi 가 뭘까 짠.View ( Model ( Intent( ) ) ) 첨에 이거 봤을때는 그래서 이게 뭔데 라고 생각했지만알고나니까 아! 역시는 역시다 라고 생각한다.하지만 나는 친절한 개발자니까 좀 더 풀어서 적어보자. 대충 요렇게 돌아가는건데 view : 우리가 맨날 만드는 화면이다. view 나 compose 모두가 될 수 있다.inten..

Android 2025.01.19

플러터의 화면이동 go_router

Go_Router  플러터에는 화면이동을 만드는 방법이 여러가지가 있는데기본적으로 플러터에서도 Navigator 가 있어서 라우팅에 전혀 문제는 없지만우리는 항상 좀 더 편하게 개발을 하고 싶으니까 go_router 를 써보자. 실제로 많은 프로젝트에서도 채택하고 있는 듯하고템플릿 구문(예: "user/:id')을 사용하여 경로 및 쿼리 매개변수 구문 분석목적지에 대한 여러 화면 표시(하위 경로)리다이렉션 지원ShellRoute를 통한 여러 Navigator 지원Material 및 Cupertino 앱 모두 지원Navigator API와의 하위 호환성같은 기능들도 지원하고 있어서 화면이동을 구현하는데 있어서 부족함이 없다. 기본 세팅 패키지를 추가해주자.dependencies: go_router: ^14..

Flutter 2025.01.05

2024년을 돌아보자.

정말 많은 일이 있었다. 내가 사랑하는 고양이가 생겼고다니던 회사를 갑작스럽게 나오게 됐고여러번의 이직시도와새로운 회사의 취직미루고 미루던 링크집의 출시 또 여러가지 개인적인 일들에서도 슬픔과 기쁨이특히나 많았던 한 해였다.한 마디로 표현하면 정말 인상깊은 1년이라고 해야할까 개발자로서는 어떤 인생을 보냈을까.사실 임팩트 있는 뭔가를 했는지는 모르겠다. 공부를 매우 열심히 했는가?  x성공적인 프로젝트가 있었는가? x블로그를 열심히 썼는가? x 그러나 잘한거도 한 번 적어보자... - 요구분석과 설계를 잘 할 수 있게 된거 같다. 이제는 보기 쉽고 명확한 설계를 작성하는 것이 어렵지 않다.- 코드를 작성할때 좀 더 좋은 코드를 위해 의식적인 노력을 하게 된거 같다. 개발 완료를 위해 달리기만 했던때의 작..

잡담 2025.01.01

안드로이드 컴포즈 네비게이션 startDestination 에 argument 전달하기

이 글은 컴포즈 네비게이션 2.7 버전을 기준으로 작성됐다. 네비게이션을 쓰다가 startDestination 로 시작하는 화면에서 바로 argument 를 전달하고 싶을수도 있다.처음 시작하는 화면에서 쓰이고 있는 hiltViewModel 에서 SavedStateHandle  에 argument 로 던진 데이터를viewModel 이 시작될때부터 가지고 있어야하는 상황이라던가 그럴때 말이다. 그런데 argument 를  startDestination 경로에 넣으면 SavedStateHandle 에서 값을 가져오질 못한다.정확하게 찾진 못했는데 startDestination 는 정적인 경로만 등록이 가능하다는거 같다. 이때 arguments 를 등록하는 곳에 defaultValue 를 전달하고자 하는 값을..

컴포즈 네비게이션 2.8 이후

안드로이드 네비게이션은 2.8 버전 이후로 Kotlin-Serializable 기반 타입 안정성 시스템이 도입됐다.이전에는 뭔가 나사 하나 빠진듯한 라이브러리였는데 이제야 좀 그럴듯해졌다.이거말고도 네비게이션은 버그가 참 많았던거 같은데 그런거도 많이 잡힌거 같다. 암튼 2.8 버전으로 달라진게 뭐냐면 아래처럼 화면을 이동할 수 있다. @Serializableobject Adata@Serializabledata class Bdata(val id: String)NavHost(navController, startDestination = Home) { composable { AScreen(onNaivateTo = { id → navController.navigate(Bdata(id)) }..

Android 2024.12.17

어쩐지 계속 잡담만 쓰는거 같지만

솔직히 요즘 블로그 쓰는게 귀찮다.써봐야겠다 라고 쌓아둔 소재는 많은데 글 쓰는게 그냥 귀찮은거 같다.글도 계속 안쓰니까 블로그 들어오는 사람도 확 줄어든게 느껴진다.뭐 그런거 신경쓰면서 썼던건 아니긴 하지만 기술적인 내용이 아니더라도 꾸준히 내 개발자 인생은 귀찮아도 기록을 남기려한다. 요즘은 설계를 많이하고 있다.바쁘다는 핑계로 그냥 시작하는게 빠르다는 핑계로 개발부터 먼저했던 습관을 버리는데 꽤 고생을 했다.요구사항을 분석하고 누가 읽어도 무슨 기능이 어디에 있어야겠구나를 알 수 있을 정도로간결하지만 명확하게 설계서를 적어내는건 나 뿐만 아니라 이걸 보고 개발에 참여할 사람들을충분히 고려해야 했기에 변수명 함수명 적는거 하나에도 신중해야했고코드 컨벤션을 항상 생각하면서 적어야했다. 그래도 이게 익숙..

잡담 2024.12.02

LinkZip 앱 출시 - 개인화된 링크주소 보관소

돌고 돌아 결국 링크집을 출시했다.설명 페이지 이미지가 구린건 디자이너의 힘을 빌리지 않고 내가 만들어서 그런 것. 보시고는 제작해서 주시기로 했다 ㅎㅎhttps://play.google.com/store/apps/details?id=com.linkzip.linkzip&hl=ko LinkZip - Google Play 앱어디서 봤더라 하고 잊은 게시글! 이제는 linkzip으로 관리하세요. 링크를 저장하고 마음대로 카테고리를 만들어서 관리할 수 있어요play.google.com짠. 링크를 복사하고 앱으로 들어와서 링크 추가하기를 누르면 자동으로 링크를 읽어와서링크, 제목, 요약된 메모를 입력해준다. 그룹도 맘대로 생성해서 그룹별로 링크를 저장해서 관리할 수 있고 즐겨찾기로 등록하거나저장해둔 링크를 바로 ..

잡담 2024.11.26

Compose + AGSL 셰이더를 이용해서 간지나는 카드 애니메이션 만들기

어디선가 카드를 휘리릭 돌리면 카드가 돌아가면서 번쩍거리는 멋진 인터렉션을 본 적이 있는거 같다.셰이더나 애니메이션에 관심이 많아진 요즘 뭐라도 해보고 싶어서 뚝딱 해봤다. 일단 최종결과물부터 봐보자.꽤 멋져.  자자 액티비티부터 만들어준다.class MainActivity : ComponentActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        enableEdgeToEdge()        setContent {            MetalCardFilpTheme {                Scaffold(modifier = Modifier...

입사 근황

이제 입사하고 슬슬 3주쯤 접어들고 있다. 일단 가장 다행인건 동료들이 다들 참 좋은 사람같다.일은 딱딱 열심히하고 워라밸도 챙기는 멋쟁이들. 스타트업만 다니다가 규모가 조금 있는 회사를 다니게 됐는데확실히 "진짜" 회사같다 라는 느낌은 들지만 엄청 다르게 느낀다거나그런건 없다. 건물전체를 사옥으로 쓰거나 사내 카페가 있는건 좀 좋긴하다 ㅎㅎ 이런 저런 이유로 인해서 생각보다 일에 빨리 투입됐는데 솔직히 코드만 계속 분석하는게지겹긴 했어서 오히려 의욕이 생겼다. 시간도 더 잘가고이해도 더 빠르게 되고 있다. 그리고 마침내 첫 pr 도 통과해서 머지도 해보고(짝짝)열심히 적응하고 있다. 입사하고 나서 그 전에 이력서를 넣었다거나 했던 기업들이 꽤 많이 붙었는데다 전형 포기를 하기로 결정했다.이미 마음을 굳..

잡담 2024.10.12

안드로이드의 암호화

안드로이드 개발을 하다보면 암호화에 대한 이야기가 종종 나온다. 민감한 정보를 사용하지 않는 앱이라면 굳이 할 필요가 없을 수 있지만 개인정보나 중요한 key 를 다뤄야할 일이 생기는데이것들이 악의를 가진 사람들에 의해 외부로 노출되면 심각한 문제가 될 수 있다. 하지만 개발자들은 바보가 아니지.시도할 수 있는 방법들이 이미 여럿 만들어져 있는데 대표적인 것들을 알아보고 필요할때 적용해보도록 하자. 암호화의 기본적인 개념암호화에 대해서 설명하기전 아래 개념을 알면 좀 더 이해가 편하다. 평문(Plaintext) : 해독 가능한 형태의 메시지(암호화전 메시지)암호문(Cipertext) : 해독 불가능한 형태의 메시지(암호화된 메시지)암호화(Encryption) : 평문을 암호문으로 변환하는 과정복호화(De..

Android 2024.10.12