소개
이해하기 쉬운 개발강의를 만들기 위해 노력하고 있습니다.
* 냉동코더의 유튜브
https://www.youtube.com/channel/UC6V7LBEgcoTZUUgUU0Jv3xg
* 냉동코더의 기술블로그
강의
수강평
- 냉동코더의 알기 쉬운 Modern Android Development 입문
- 냉동코더의 알기 쉬운 Modern Android Development 입문
- 냉동코더의 알기 쉬운 Modern Android Development 입문
- 냉동코더의 알기 쉬운 Modern Android Development 입문
게시글
질문&답변
스코어 만들기 강의의 info.plist 파일이 없어요
가장 첫번째 강의인 SpriteKit이란? 에서 프로젝트를 만들 때 생성되는 파일입니다. 10:30 부터 확인해 보세요 :-)
- 0
- 1
- 131
질문&답변
Coroutine, Flow 질문
올려주신 코드를 실행시켜보시면 반환값은 다음과 같이 나오게 됩니다.I'm not blocked 1 1 I'm not blocked 2 2 I'm not blocked 3 3 https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjIyIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiaW1wb3J0IGtvdGxpbnguY29yb3V0aW5lcy4qXG5pbXBvcnQga290bGlueC5jb3JvdXRpbmVzLmZsb3cuKlxuXG5cbmZ1biBtYWluKCkgPSBydW5CbG9ja2luZzxVbml0PiB7XG4gICAgLy8gTGF1bmNoIGEgY29uY3VycmVudCBjb3JvdXRpbmUgdG8gY2hlY2sgaWYgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWRcbiAgICBsYXVuY2gge1xuICAgICAgICBmb3IgKGsgaW4gMS4uMykge1xuICAgICAgICAgICAgcHJpbnRsbihcIkknbSBub3QgYmxvY2tlZCAka1wiKVxuICAgICAgICAgICAgZGVsYXkoMTAwKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbGxlY3QgdGhlIGZsb3dcbiAgICBzaW1wbGUoKS5jb2xsZWN0IHsgdmFsdWUgLT4gcHJpbnRsbih2YWx1ZSkgfVxuLy8gICAgIHByaW50bG4oXCJ0ZXN0XCIpIFxufVxuXG5mdW4gc2ltcGxlKCk6IEZsb3c8SW50PiA9IGZsb3cgeyAvLyBmbG93IGJ1aWxkZXJcbiAgICBmb3IgKGkgaW4gMS4uMykge1xuICAgICAgICBkZWxheSgxMDApIC8vIHByZXRlbmQgd2UgYXJlIGRvaW5nIHNvbWV0aGluZyB1c2VmdWwgaGVyZVxuICAgICAgICBlbWl0KGkpIC8vIGVtaXQgbmV4dCB2YWx1ZVxuICAgIH1cbn0ifQ==
- 0
- 1
- 264
질문&답변
Transformations import 안됨
디펜던시 버전이 올라가면서 사용법이 좀 더 직관적으로 바뀐게 맞는 것 같네요. 공식문서의 예제에 따라 사용하시면 됩니다.Transformations을 사용하면 새로운 객체를 만들어서 사용하게 되는데, 이렇게 해야 ViewModel과 데이터 레이어의 결합관계가 약해져서 앱 구조가 견고해집니다.원본 데이터 값에 변형을 가해서 사용하고 싶은 경우에 Transformation을 사용하면 됩니다. MainActivity 에서 myViewModel.liveCounter.value = myViewModel.liveCounter.value?.plus(1)로 값을 증가시킨 것은 원본 데이터를 수정한 것이 맞습니다. 실제 앱으로 생각하면 repository를 통해 데이터를 수정한 것인데, 이 영상의 시점에서는 아직 repository가 소개되지 않았기 때문에 설명의 간략화를 위해 viewmodel에서 데이터를 수정하는 기능을 구현했습니다.
- 0
- 1
- 397
질문&답변
moshi관련 질문입니다.
확인해 봤는데 codegen 버전을 업그레이드했더니 정상적으로 빌드됩니다 :-)kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")
- 0
- 2
- 407
질문&답변
searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.
Handler는 메인 스레드에서 동작하므로, 만약 검색 동작이 시간이 오래 걸리는 경우 UI가 응답하지 않을 수 있습니다. 차라리 코루틴으로 searchJob을 정의해서 작업을 제어 해 보세요.
- 0
- 1
- 262
질문&답변
안드로이드에서 아키텍처 패턴
우선 MVC, MVP, MVVM은 안드로이드가 나오기도 전부터 있었던 굉장히 오래된 개념이라는 것을 알아주시기 바랍니다. 강의에서도 설명했지만 MVC는 1970년대, MVP는 1990년대에 나온 아키텍처이므로 이 아키텍처에서 말하는 View 혹은 ViewModel이란 어떤 구조를 설명하기 위한 의도에서 만들어 낸 개념이지, 그것이 안드로이드의 View와 ViewModel에 정확히 1:1로 대응되는 무언가가 아닙니다. 안드로이드의 Activity라는 개념부터가 View와 Controller를 섞은 상태로 만들수도 있고, 또 따로 분리하여 만들 수도 있는 어중간한 클래스이기 때문입니다. 또 강의 마지막에서 언급했듯이 아키텍처의 개념은 과학적으로 입증되어 불변인 개념이 아니므로, 집단에 따라 생각하는 형태나 구조가 조금씩 다를 수 있습니다. 제가 강의에서 보여드린 그림은 인터넷에서 아키텍처 구조를 검색하면 대표적으로 찾을 수 있는 그림으로 여러 블로그나 기사에서 이 그림으로 아키텍처 구조를 설명하고 있습니다만, [1]번 질문에서 하신것 처럼 인풋을 뷰가 받는다고 생각하는 사람도 있습니다. 아키텍처 속에서 화살표의 방향이 어떻게 되느냐는 것은 이 얘기의 본질이 아니며 정답이라는 게 없을 뿐더러 정답이 무엇인가 하는 게 중요한 것도 아닙니다. 중요한 것은 코드의 일관성을 유지하고 유지보수성을 높이기 위한 방법에 대해 과거로부터 사람들이 계속 고민을 해 왔고 그것이 모델의 개선 혹은 변화라는 형태로 이어져 왔다는 것을 아는 것입니다. 다만 3번으로 질문하신 것의 대답을 드리면 제가 강의에서 설명한 것처럼 MVC에서 중간에 인터페이스를 추가한 것의 의도는 관심사를 분리(separation of concerns, SoC)하는 효과를 얻는 것입니다. 관심사를 분리하기 위한 여러가지 설계의 원칙을 정리한 것이 SOLID이며, SOLID를 구현하기 위한 여러가지 방법 중의 하나가 의존성 주입이라고 생각하시면 됩니다. 이 부분에 대해서는 섹션10. Dependency Injection 기초 영상을 참고하시기 바랍니다.
- 0
- 1
- 282
질문&답변
RecyclerView.Adapter vs ListAdpater
ListAdapter가 어떤 상황에서도 Recyclerview.Adapter보다 좋은 것이 아니고 상황에 맞게 사용하시면 됩니다. 동적으로 변화가 많은 데이터라면 ListAdapter가 빠르게 처리해 줄 수 있겠지만, 고정된 데이터를 계속 보여주어야 하는 경우 굳이 ListAdapter를 쓸 필요가 없겠죠.사실 ListAdapter는 Recyclerview.Adapter에서 DiffUtil을 쓰기 편하게 만든 확장에 지나지 않기 때문에 ListAdapter를 쓴다고 해도 내부적으로는 사실 Recyclerview.Adapter를 쓰고 계시는 것입니다.
- 0
- 1
- 335
질문&답변
Flows 와 Coroutine
말씀하신대로 하면 test가 먼저 찍히게 됩니다. 다음 링크에서 확인해 보세요 🙂 https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjEwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiaW1wb3J0IGtvdGxpbnguY29yb3V0aW5lcy4qXG5pbXBvcnQga290bGlueC5jb3JvdXRpbmVzLmZsb3cuKlxuXG5cbmZ1biBtYWluKCkgPSBydW5CbG9ja2luZzxVbml0PiB7XG4gICAgLy8gTGF1bmNoIGEgY29uY3VycmVudCBjb3JvdXRpbmUgdG8gY2hlY2sgaWYgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWRcbiAgICBsYXVuY2gge1xuICAgICAgICBmb3IgKGsgaW4gMS4uMykge1xuICAgICAgICAgICAgcHJpbnRsbihcIkknbSBub3QgYmxvY2tlZCAka1wiKVxuICAgICAgICAgICAgZGVsYXkoMTAwKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbGxlY3QgdGhlIGZsb3dcbi8vICAgICBzaW1wbGUoKS5jb2xsZWN0IHsgdmFsdWUgLT4gcHJpbnRsbih2YWx1ZSkgfVxuICAgIHByaW50bG4oXCJ0ZXN0XCIpIFxufVxuXG5mdW4gc2ltcGxlKCk6IEZsb3c8SW50PiA9IGZsb3cgeyAvLyBmbG93IGJ1aWxkZXJcbiAgICBmb3IgKGkgaW4gMS4uMykge1xuICAgICAgICBkZWxheSgxMDApIC8vIHByZXRlbmQgd2UgYXJlIGRvaW5nIHNvbWV0aGluZyB1c2VmdWwgaGVyZVxuICAgICAgICBlbWl0KGkpIC8vIGVtaXQgbmV4dCB2YWx1ZVxuICAgIH1cbn0ifQ==
- 1
- 1
- 434
질문&답변
[BookSearchAdapter] onBindViewHolder의 currentList[position] 질문
getCurrentList는 현재 표시되고 있는 데이터의 변경 불가능한 복사본을 반환하고, getItem은 특정 위치의 개별 데이터 항목을 얻는데 사용합니다. 데이터를 조작할 목적이 아닌 UI 표시에 필요한 데이터는 getCurrentList로 획득하는 것이 적절합니다.
- 0
- 1
- 248
질문&답변
코루틴 메모리 관련해서 질문드립니다!
네 맞습니다. 다음 토론들도 참고해 보세요 :)https://stackoverflow.com/questions/43021816/difference-between-a-thread-and-a-coroutine-in-kotlin/43232925#43232925https://stackoverflow.com/questions/1934715/difference-between-a-coroutine-and-a-thread
- 0
- 1
- 302