교육하고 책 쓰는 개발자 오준석입니다.
'오준석의 생존코딩' 유튜브 채널과 생존코딩 (https://survivalcoding.com) 교육 플래폼을 운영중입니다.
저서
오준석의 플러터 생존코딩 (한빛미디어 2020)
오준석의 안드로이드 생존코딩: 코틀린 편 (한빛미디어 2018)
될 때까지 안드로이드 (루비페이퍼 2018)
주요경력
오렌지(OhRange) 대표
세민직업전문학교 정보기술개발 직업훈련교사
수원스마트앱개발학원 운영
LG전자 MC사업부
일본 아이치현 (株)東海理科 Security사업부
일본 아이치현 (株)日本テクシード IT사업부
LinkedIn: https://www.linkedin.com/in/junsuk5/
강의
로드맵
전체 1수강평
- Flutter 고급 - 현업 수준의 아키텍처
- Kotlin 문법 총 정리 - 1시간
- Flutter 고급 - 현업 수준의 아키텍처
- Flutter 고급 - 현업 수준의 아키텍처
게시글
질문&답변
Bad state 에러
여러가지 방법이 있는데요.@singleton 어노테이션 대신에 @lazySingleton 으로 고쳐서 지연된 초기화를 하면 해결 될 것 같습니다.혹시 해결 되셨는지 답변 기다리겠습니다.
- 0
- 1
- 30
질문&답변
domain 에 data_source 를 만드는 이유.
@Seung Min Liang @송진욱 두 분의 의견을 종합해 봤을 때, DataSource 인터페이스를 Data 레이어에 두는 것이 바람직해 보입니다.Domain 은 순수 비즈니스 로직에 집중해야 하는데, 데이터 소스를 끌고 들어온 것은 잘못 된 것이 맞습니다.해당 내용에 대해서 자막을 추가하여 영상 업데이트를 하도록 하겠습니다.좋은 의견에 감사드립니다.
- 0
- 3
- 180
질문&답변
31강 stream 활용시 어떤장점이 있나요?
Future : 단발성 비동기 처리Stream : 지속적인 데이터 비동기 처리일반적인 요청은 Future계속 모니터링을 해야하는 것은 Stream 으로 처리하면 됩니다.
- 0
- 2
- 76
질문&답변
view model 은 팩토리로 생성하는 이유
ViewModel 은 화면에 표시할 데이터를 제공하는 데이터 Holder 역할을 하게 됩니다.화면을 위한 것이므로 화면과 같은 생명주기를 가져야만 버그 발생 가능성을 줄일수가 있습니다. 만약 List, Detail 두 개 화면이 있을 때 DetailViewModel 이 싱글턴으로 유지되면 새로운 항목 클릭해서 Detail 화면으로 왔을 때 기존 화면의 내용이 잠깐 남아 있다가 교체가 될 수도 있고기존 화면의 내용 일부가 남아 있을 수도 있는 등의 버그 발생 가능성이 있고, 굉장히 귀찮아 집니다. 그래서 화면과 ViewModel 의 생명주기를 같게 하는 것이 중요합니다.
- 0
- 1
- 115
질문&답변
domain 에 data_source 를 만드는 이유.
구현체는 data 레이어, 추상화된 인터페이스는 domain 레이어에 두고 있습니다.domain 레이어가 앱의 핵심 비즈니스 로직을 담당하고 있는데요. domain 레이어에 data_source 의 인터페이스를 두게되면 각 레이어간의 의존관계가 다음과 같아집니다.presentation --> domain 의존성의 방향이 외부에서 내부로 향하게 되는 의존성 역전 원칙(DIP)가 적용되고, 핵심은 domain 이게 됩니다. 이 상태에서는 presentation 의 테스트에 domain 레이어만 필요하게 되고data 레이어의 테스트에도 domain 만 필요하게 됩니다. 만약 data_source 인터페이스가 data 레이어에 있다면 의존 관계는 다음과 같아집니다.presentation --> domain data domain 레이어에 있는 Repository 인터페이스가 data 레이어에 있는 data_source 인터페이스를 참조해야 하기 때문입니다. 이 경우에는 추후에 멀티 모듈 방식으로 프로젝트가 확장되게 될 때 각 레이어를 나누기 어려워 지기 때문에 확장성에 제한이 생길 수 있습니다.
- 0
- 3
- 180
질문&답변
기존 코드 mvvm으로 역할 분리하는 기준이 궁금합니다
인공지능 답변에 이어 제가 답변 드리겠습니다.이 부분이 쉽지 않은 영역인데요.파일 디코딩 -> JSON 변환은 순수하게 데이터를 처리하는 부분이고 Service 또는 DataSource 로 부를 수 있겠습니다.비즈니스 로직은 여기에 앱에 필요한 로직이 가미되면 그것이 비즈니스 로직입니다.비즈니스 로직은 두 군에서 작성할 수 있겠습니다.View에 대한 비즈니스 로직은 ViewModel 에 함수에서 작성합니다.그 외에 데이터의 복잡한 처리가 비즈니스 로직이라고 보면 될 것 같습니다.결론적으로 "앱에 필요한 로직이 가미되면 그것이 비즈니스 로직"이다. 라고 보시면 어떨까요?
- 0
- 2
- 36
질문&답변
ListenableBuilder가 안되요..material import 했는데도 자동완성이 안뜨고 빨간줄이 뜨네요 ..
답변이 늦었습니다.AI 인턴의 말은 무시하시고요. 아직도 안 되실까요?아마도 근처에 const 들이 영향을 줄지도 모르겠습니다. const 들을 하나씩 제거해 보면서 시도해 보세요.
- 0
- 2
- 39
질문&답변
Flutter에서 추천하는 Navigator, Router
go_router 사용에 대해 말씀드리면:1. Hot Reload 시 파라미터 초기화 문제- 개발 중에만 발생하는 이슈로, 실제 프로덕션 환경에서는 문제되지 않습니다- 이는 hot reload의 특성상 상태가 초기화되는 것이 정상적인 동작입니다2. 데이터 전달 방식 선택- extra: 임시적인 데이터나 복잡한 객체 전달에 적합- path/query 파라미터: * 페이지 새로고침 후에도 데이터 유지 필요시 * 딥링킹 지원 필요시 * URL에서 상태 확인이 필요한 경우3. go_router 사용 권장 케이스- 웹 지원이 필요한 프로젝트- URL 기반 라우팅이 필요한 경우- 중첩 라우팅이 필요한 경우- 딥링킹 지원이 필요한 경우4. 일반 Navigator 사용 케이스- 단순한 네비게이션만 필요한 경우- 웹 지원이 불필요한 경우- URL 기반 라우팅이 불필요한 경우결론적으로, go_router는 특히 웹 지원이나 딥링킹이 필요한 프로젝트에서 매우 유용하며, 파라미터 전달 방식은 사용 케이스에 따라 적절히 선택하시면 됩니다.
- 0
- 2
- 82
질문&답변
The following ProgressEvent object was thrown resolving an image codec: [object ProgressEvent]
아니. AI 인턴이 2분만에 답을 해 버리네. 로컬에서는 되고 배포하면 안 되는 경우 대부분 CORS 설정 때문입니다.인턴 말대로 해 보시기 바랍니다.
- 0
- 3
- 124
질문&답변
dispose 오버라이드 메소드 자동완성이 안 됩니다.
툴이 버그가 많아서 안 될 때도 있는데, 일단 AndroidStudio 최신 버전 확인.StatefulWidget 인지 확인해 보시고요.인프런 AI 가 얘기한거 확인 해 보시고, 정 안되면 일단 수동으로 작성하시죠.
- 0
- 2
- 63