
네이버 앱을 들어가면 좌우 스와이프 기능으로 메뉴가 바뀌는걸 볼 수 있는데그러한 기능을 구현해 주는 것이 ViewPager이다각각의 메뉴는 Fragment로 만들고, 어댑터 클래스를 생성하여 MainActivity에서 셋팅해주면 된다.4개의 프래그먼트를 먼저 생성해주고
LinearLayout의 자식뷰에서 사용할 수 있는 속성으로 레이아웃을 기준으로 뷰의 정렬 위치를 정할 수 있다뷰 자체 크기 안에서 정렬을 함. 만약 layout_width와 layout_height가 match_parent인 경우에는 layout_gravity와 동일
회원가입 기능을 구현하려는데기획 당시 화면을 여러 개로 나누는 것으로 정해져 있었다.처음 들었던 생각으로는 '화면을 이동할때마다 프래그먼트를 쌓는 방식으로 구현하면 되겠다' 였다.그리고 좀 더 생각해보니 ViewPager2를 이용할 수 있겠다 싶어서 이걸 이용해보기로

온라인 데이터를 가져오기전에로컬에 캐싱된 데이터를 가져올 수 있다면 그걸 가져온다.이 과정을 위해 Repository 패턴을 사용한다.오프라인 캐싱이 주 목적먼저 DataSource를 인터페이스로 작성오프라인 DataSource와 온라인 DataSource 클래스를 작
setFragmentResult와 setFragmentResultListener를 사용하면 된다!Activity끼리의 이동에서는 갔다가 돌아올때 activityResultLauncher로 받아올 값을 정해줄 수 있었지만, Fragment는 Launcher를 사용할 수
액티비티가 시작할때 처음 onCreate 호출되면서 프래그먼트가 붙게 되는데 onAttach부터 시작액티비티 생명주기에서onStop으로 나가면 onStart로 돌아온다.onPause로 나가면 onResume으로 돌아온다.멘토님은 on리스너를 붙일 때 onStart에서
요즘에는 SharedPreferences 대신 데이터 스토어를 쓴다SharedPreferences의 경우 파일을 열어보면 바로 저장한 데이터를 확인할 수 있기 때문에 암호화를 하면 내용을 보호할 수 있다.자동로그인 기능을 위한 유저 토큰을 저장할 때에는 SharedPr
※ 헤이딜러 안드로이드 팀의 글을 참조했다.https://medium.com/prnd/mvvm%EC%9D%98-viewmodel%EC%97%90%EC%84%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8%EB%A5%BC-%EC%B2%98%EB%A6%AC
객체 인스턴스의 생성을 직접하지 않고 (다른 곳에서 만들어져서) 필요한 곳에 전달되도록 코드를 조직화하는 기법객체 인스턴스를 사용하는 곳을 클라이언트(client)라고 부름의존성(a dependency) : 사용되는 객체 인스턴스클라이언트가 아닌 잘 조직화 된 곳에서
Activity : 앱 코드가 활동되는 창권한 : 위치 추적, 연락처 접근 등에 필요한 권한서비스 : 푸시메시지 및 백그라운드에서 작동브로드 캐스터 : 디바이스 현재 상태 방송3개의 폴더 중 가장 상단의 폴더에 있는 파일들만 작업할 때 사용빌드할 때 생성되는 시스템 클

앱 단위, 프로젝트 단위의 build.gradle.kts 파일에 아래와 같이 추가해준다.build.gradle파일 수정후 항상 sync now로 동기화해준다.상단 폴더에 App 클래스 파일을 만들고 Application 클래스를 상속받는다클래스 위에 @HiltAndro

Hilt는 표준컴포넌트를 제공해주기 때문에 개발자가 직접 컴포넌트를 만들 필요가 없다.(만들 수는 있음)각 화살표의 방향은 하위 컴포넌트를 가리킨다.하위 컴포넌트에서 상위 컴포넌트의 의존성에 접근하는 것은 가능하다.하지만 상위 컴포넌트에서 하위 컴포넌트의 의존성에 접근

여기서 Android Class는 Application, Activity, Service, Fragment, BroadcastReceiver, ViewModel 등을 지칭하고 Client로써 컴파일 타임에 Container에 의존성을 요청한다.Hilt Componen
카카오페이지https://designnas.com/portfolio/mobile_pf/kakowebtoon/index.html네이처메이드https://designnas.com/portfolio/ux_flow/naturemade/나이키https:
https://github.com/svenjacobs/revealhttps://github.com/pseudoankit/coachmark컴포즈에서 사용할 수 있는 라이브러리인 것 같다xml 레이아웃 기반의 라이브러리도 있는지 한 번 찾아봐야겠다.
안드로이드 4대 구성요소프래그먼트 생명주기액티비티 생명주기인텐트 두 종류MVC, MVP, MVVM 비교자바와 코틀린의 차이점Context란?코틀린의 스코프 함수?비동기란?코루틴과 스레드의 차이점ANR에 대해서
안드로이드 개발 시 활용할 수 있다.
Companion Object 자바에서의 static을 코틀린에서는 사용할 수 없다. 대신 companion object(동반 객체)라는 것을 사용할 수 있다. 자바 static : 클래스가 인스턴스화 될 때 새로운 값이 복제되는 것이 아니라 정적으로 인스턴스끼리 값
A,B 액티비티간 데이터를 전달하는 방법을 라이프사이클을 활용해 구현한다A액티비티에서 B액티비티로 이동하고 B액티비티에 inputText값을 입력한 후에 해당 입력값을 A액티비티에 가져오려면...B액티비티의 onPause에서 companion object에 값 저장A액
프리뷰 화면에 커서를 올리면 위에 살짝 조그맣게 메뉴가 4개 나오는데,그 중 3번째 Start Interactive Mode를 누르면실제 앱 실행한 것 처럼 해당 화면의 버튼을 누르거나 텍스트를 입력해볼 수 있다.
컴포즈로 작업중인 화면에서 아래와 같이 타이틀과 공지사항이 있는 부분이 스크롤 할 때 올라가도록 하고 싶어서 구글링을 해보니 TopAppBar에 nestedScroll을 적용하면 된다고 한다.간혹 글 중에 NestedScrollConnection 인터페이스 구현체를 만
컴포즈로 프로젝트를 개발할 때 컴포저블 함수에 매개변수가 있을 경우 @Preview가 동작하지 않는다이 때 @PreviewParameter를 사용하면 매개변수의 값에 따른 각각의 Preview를 확인할 수 있다.먼저 @PreviewParameter를 사용하려면 Prev
내용 작성에 앞서 본 앱은 뷰바인딩이 적용되어있지 않은 레거시 코드로 이루어져 있어 아직 뷰바인딩으로 수정하지 않은 점 참고 부탁드립니다.앱의 메인화면 배너 이미지를 glide를 사용하여 출력하고 있는 상태이다.배너는 view flipper로 구성되어있어 코드로 이미지
모의 기술 면접코틀린 & 안드로이드 예상 질문초급Activity가 담당하는 역할이 무엇인지 설명해 주시기 바랍니다사용자와의 상호 작용(inter action)부착된 프래그먼트를 관리 등등Activity 생명주기(Life Cycle)에 대해 설명해 보세요.(각 콜백함수가
인터페이스란?해당 소프트웨어개발의 표준명세서(약속)라고 할 수 있습니다인터페이스를 통해 일관된 틀 안에서 정형화된 작업을 진행할 수 있습니다.서로 관계없는 클래스를 인터페이스 구현을 통해 공통 관계를 맺게 해줄 수 있다.클래스의 선언과 구현을 분리함으로써 독립적인 프로
앱 업데이트 전 내부 테스트를 진행할 때새 버전 만들고 출시를 하면 해당 버전이 바로 플레이스토어에 반영되지 않는 것 같다.한 10~20분정도 기다린 후에 버전 변경 확인 후 설치해줘야 함
https://www.youtube.com/shorts/c6aWSiaepAM요 숏츠를 보고 깜짝 놀랐다!나는 생각도 못한 방법이었는데...아래와 같이 레트로핏을 사용하면서 개발용, 배포용 base url을 구분지어 사용해야 한다면직접 코드로 분기 처리를 할 필
플레이스토어에 앱을 업데이트하기 위해 내부 테스트 버전을 업데이트 했는데빌드 전에 테스트서버 url을 실서버 url로 바꿔야하는 것을 깜빡해버렸다...이미 내부 테스트로 새 버전이 업로드되었고앱번들의 versionCode는 현재 날짜를 기준으로 작성하고 있었다.다행히도
여러 항목이 있는 리스트를 표현할 때초기에는 리스트 뷰를 사용했지만 지금은 리사이클러뷰를 사용한다.리스트 뷰는 가진 항목을 표현하는 뷰를 모두 생성했지만 리사이클러뷰는 모든 뷰를 생성하지 않고 몇개의 뷰만 생성하여 화면에서 벗어난 뷰를 재사용하여 뷰가 삭제되고 생성되는
현재 진행중인 팀 프로젝트 중 하나가 xml로 작업한 건이었는데이번에 리팩토링을 진행하면서 Compose로 천천히 바꿔보자는 의견이 나왔다.처음부터 Compose로 프로젝트를 시작한 적은 있지만 xml에서 Compose로 바꾸는 과정을 경험해 본 적은 없기에, 좋은 경
xml방식에서 컴포즈로 대체하는 과정에서프래그먼트의 onCreateView 코드를 아래와 같이 작성했었다.애초에 바인딩 객체를 리턴할 필요 없이 컴포즈뷰만 리턴해도 된다고 한다.나는 컴포즈뷰만 리턴해도 된다는 이야기가 binding.composeView로 xml에서 작
프로젝트 중 xml에서 컴포즈로 전환하는 작업을 하고 있는데아래와 같이 chip을 사용하는 화면이 있었다.</>xml에서는 chip을 감쌀 수 있는 chip group을 제공해주고 있지만, 컴포즈에서는 chip group이라는 요소가 따로 없는 것 같았다.Row나
현재 진행중인 프로젝트에서 회원가입 개발을 담당하고 있다.전화번호 인증 과정이 있는데 여기서 문자로 받은 인증 코드를 입력해야 하는 절차를 구현해야 했다.문자 내용을 받는 객체를 만들고 담을 변수를 선언했는데아래와 같은 코드가 작성되었다.PR 후 코드 리뷰를 받으면서

mvnrepository.com에서 힐트 라이브러리를 검색해서 안드로이드 프로젝트에 의존성을 추가하려고 할 때이미지와 같이 implementation이 아닌 runtimeOnly로 표시되어있는걸 볼 수 있다.여기서 runtimeOnly란 Gradle에서 사용하는 의존성
결론은 class.qualifiedName로 찾으면 된다싱글 액티비티와 컴포즈를 사용하는 안드로이드 프로젝트에서스캐폴드의 탑바와 바텀바를 특정 화면에서는 가려주고 특정 화면에서는 보여줘야 할 때,아래와 같이 조건문을 사용했었다.그리고 currentRoute를 로그에 찍
바이브코딩으로 앱을 제작했고 배포후 지금은 계속 리팩토링과 기능 추가를 진행중이다.뷰모델에서 단일성 이벤트(스낵바, 네비게이션 등)가 Channel 구독으로 처리되어있길래 StateFlow나 SharedFlow를 사용하지 않은 이유를 물어봤더니 다음과 같이 글을 작성해