포스팅 썸네일 이미지

학습

Flow, Channel, ChannelFlow, CallbackFlow

Flow와 Channel의 목적 Flow : 데이터를 생성하고 처리하는데 사용할 수 있습니다.Channel : 코루틴 간에 데이터를 주고 받는데 사용할 수 있습니다. Flow & Channel 비교 Flow는 비동기적으로 생성된 데이터를 전달하는 스트림으로, 관찰자가 없으면 데이터를 생성하지 않는 Cold source 입니다.기본적으로 Flow는 생성된 데이터가 collect 함수에 의해 소비될 때까지 다음 데이터를 생성하지 않습니다. 단, buffer 함수를 통해 버퍼를 설정하면, 버퍼 크기 + 1 만큼의 데이터를 미리 생성할 수 있습니다. 버퍼가 있는 Flow는 Hot source 입니다. onBufferOverflow 파라미터를 이용해 버퍼가 꽉찼을 때 동작을 정의할 수 있으며, 다음의 3가지 종류..

2024.08.15 게시됨

포스팅 썸네일 이미지

학습

RecyclerView Itemdecoration 올바르게 사용하기

1. 구현 요구 사항 프로필 화면에서 사용자들이 모임에서 찍었던 사진을 GridView 타입으로 보여줄 수 있는 UI가 필요했습니다.이때, 인스타그램과 같이 사진 사이에 동일한 Margin이 필요했습니다. 2. 구현 방법 사진들을 표시하기 위해 구현한 RecyclerView 입니다.한 열에 여러 이미지를 표시하기 위해 GridLayoutManager를 이용했으며, 개수는 3개로 설정했습니다.  ViewHolder에서 사용한 XML 입니다.RecyclerView에서 한 열의 아이템을 3개로 설정했기 때문에, 3개의 아이템이 모든 width를 차지하도록 Layout의 width를 match_parent로 설정했습니다.이미지가 정사각형으로 표시되도록 Style을 정의해 설정했습니다.아이템 사이의 세로 방향 M..

2024.07.24 게시됨

포스팅 썸네일 이미지

후기

내일배움캠프 Android 3기 자세한 후기

이전에 작성한 시점으로부터 2주가 지난 시점에 더 자세한 후기를 작성해보고자 한다. https://dodobest.tistory.com/113 240629 TIL - 1주 남은 시점에 작성하는 내일배움캠프 Android 3기 후기TIL을 안 쓴지 2개월이 된 것 같은데, 수료까지 일주일 남은 시점에 후기를 작성해보려고 합니다. 장점 - 교육 시간 내내 상주하시는 다양한 튜터 님들 이 부분이 내일배움캠프의 가장 큰 장점이dodobest.tistory.com  1. 참여 계기 2022년 하반기에 네이버 부스트캠프 7기 Andorid 과정에 참여한 경험이 있으나, 학습 방향에 있어서 어려움을 겪었다. 코드몽키가 되지 않으려면 단순히 기능만 구현하는 것이 아니라 이해하고 사용해야 한다는 영상을 보고, 필요하지 ..

2024.07.14 게시됨

포스팅 썸네일 이미지

TIL

240629 TIL - 1주 남은 시점에 작성하는 내일배움캠프 Android 3기 후기

TIL을 안 쓴지 2개월이 된 것 같은데, 수료까지 일주일 남은 시점에 후기를 작성해보려고 합니다. 장점 - 교육 시간 내내 상주하시는 다양한 튜터 님들 이 부분이 내일배움캠프의 가장 큰 장점이라고 생각합니다. 아침 9시부터 저녁 9시까지 다양한 튜터 님들이 온라인 교육 공간에 상주하고 계셔서 질문할 수 있습니다. 그런데 처음 학습하시는 분이라면 이 부분이 오히려 단점이 될 수도 있습니다. 튜터 님에게 가서 바로 질문을 할 수 있다보니, 소통 채널인 Slack 질문방에 질문이 올라오지 않았습니다.(기수마다 다를 수 있습니다.) 그래서 내가 모른다고 인지한 지식만 질문을 통해 학습할 수 있기 때문에, 개발에 대한 사전 지식이 없다면 큰 성장을 하기란 어려울 것 같습니다.네이버 부스트캠프 챌린지 과정에서 공..

2024.06.29 게시됨

포스팅 썸네일 이미지

학습

왜 repeatOnLifecycle 앞에 viewLifecycleOwner를 붙여야할까?

핵심 내용 선 정리왜 repeatOnLifecycle 앞에 viewLifecycleOwner를 붙여야할까? 공식문서 예시 코드에서 repeatOnLifecycle 앞에 viewLifecycleOwner를 붙여서 사용하고 있습니다. 왜 일까요?  class MyFragment : Fragment() { val viewModel: MyViewModel by viewModel() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // Create a new coroutine in the lifecycleScope ..

2024.06.26 게시됨

포스팅 썸네일 이미지

학습

Iterable, Iterator, Collection

전체적인 구조Collection, Iterable, Iterator의 전체적인 구조는 다음과 같다. 각 Interface는 어떻게 구성되어 있고 어떤 역할을 하는지 알아보자.  Iterable Iterator를 반환하는 함수만 있는 인터페이스다. 이 인터페이스를 구현하는 클래스는 iterate 될 수 있는 sequence를 의미한다.iterate의 사전적 의미 : (계산·컴퓨터 처리 절차를) 반복하다 public interface Iterable { public operator fun iterator(): Iterator} operator iterator 함수 앞에 operator 키워드가 붙어 있다. operator는 1 + 3 과 같이 함수(add)를 symbol(+)로 호출할 수 있도록 해주는..

2024.05.21 게시됨

포스팅 썸네일 이미지

학습

Room에 초기 값을 넣으려면 어떻게 해야할까?

사용자가 앱을 처음 설치하거나 저장소, 캐시를 삭제한 후 다시 실행했을 때 Room에 초기 값을 넣으려면 어떻게 해야 할까요? 공식 문서에서 안내하는 여러 방법과 문제점을 알아보겠습니다. RoomDatabase.Callback() Room DatabaseBuilder를 이용해 Database를 생성할 때, builder의 addCallBack 함수의 인자로 RoomDatabase.Callback 클래스를 전달할 수 있습니다. Callback 클래스는 총 3가지 함수로 되어 있습니다. onCreate : database가 최초로 생성되는 시점에 호출됩니다. 단, 모든 table이 생성된 이후에 호출된다는 점에 주의해야 합니다.onOpen : database가 open 될 때마다 호출됩니다.onDestruc..

2024.05.18 게시됨

포스팅 썸네일 이미지

학습

EditText에서 하드웨어 키보드 대응하기 with 가상 키보드, 커서

하드웨어 엔터 또는 가상 키보드의 완료 버튼에 해당하는 값EditorInfo는 키 입력을 완료했을 때의 동작에 해당하는 값입니다. EditText의 imeOptions attribute에서 설정할 수 있습니다.아무 것도 설정하지 않으면 기본 값인 actionDone(S23/Android14) 또는 actionNext(S9/Android10)로 설정됩니다. 완료 : EditorInfo.IME_ACTION_DONE, EditorInfo.IME_ACTION_SEARCH,  EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_NEXT    actionDone은 다음과 같습니다. actionSearch는 다음과 같습니다.  actionSend는 다음과 같습니다.   엔터..

2024.05.02 게시됨

포스팅 썸네일 이미지

학습

FrameLayout에서 Fragment 올바르게 사용하기

FrameLayout에서 Fragment를 사용하는 방법안드로이드 공식 문서에서 Fragment를 위한 container로 FragmentContainerView 사용을 강력하게 권장합니다.It is strongly recommended to always use a FragmentContainerView as the container for fragments, as FragmentContainerView includes fixes specific to fragments that other view groups such as FrameLayout do not provide.https://developer.android.com/guide/fragments/create#add 그럼에도 FrameLayout에서..

2024.05.02 게시됨