내배캠이 시작됐다.사전캠프 기간에 참여하려고 했으나 시간 조율이 어려워 자습만 했다. 아니 자습도 못했다고 봐야겠다.처음 써보는 언어, 처음 써보는 IDE, 처음 접해보는 안드로이드 앱... 쉽지 않을 일만 가득해 보이지만 어쨌든 시작 총성은 울려 퍼졌으니 달릴 수밖엔
오늘은 동기부여 세션이 있었다.왜 개발자를 하고자 마음먹었는지, 좋은 개발자가 되려면 무엇이 중요한지, 어떻게 성장해야 할지 등 방향성을 재고해보고, 튜터님의 조언도 들을 수 있는 좋은 시간이었다.오늘은 배열 슬라이싱에 대해 적어보고자 한다.슬라이싱을 하려고 보니 파이
오늘은 git 세션이 있었다. vscode 터미널에서 git 명령어를 사용하여 깃헙에 push, pull 하는 과정까지 진행했다. 본격적인 협업을 위한 브랜치 활용은 추후에 예정되어 있다고 했다. 깃을 처음 접했을 때부터 소스트리로 사용했기에 CLI를 통한 깃 사용은
오늘은 마인드셋 세션이 있었다. 왜 개발자가 되었는지와 협업 및 의사소통의 중요성, 그리고 동료 및 튜터분들에게 질문을 적극적으로 하되 세번의 시도를 해보라는 것 등의 내용이었다. 그리고 안드로이드 개발자로서의 장대한 로드맵을 보여주며 이를 다 공부할 수는 없을 노릇이
오늘은 TIL 세션이 있었다. 아직 감을 잡지 못하는 학생들에게 TIL이 무엇인지, 어떻게 작성해야 하는지 기본적인 개념부터 설명해주셨다. 그리고 이를 어떻게 내 발전에 도움이 되도록 사용할 것인지, 주제를 어떻게 잡는게 좋을지 여러 방법을 알려주셨는데, 역시 가장 좋
한 주의 시작, 월요일이다. 2주차 발제가 있었다. 이제 온보딩 주차도 지났고, 수강 철회 기간이 지나서 학생들 모두 수강 확정이 되었다. 들어올 때는 마음대로였지만 나갈 땐 아닌 몸이 된 것이다. 그리하여 본격적인 코틀린 문법 공부 챕터가 시작되었다. 이번 주 개인과
오늘은 알고리즘 문제 몇 개를 다뤄보겠다.정수를 입력받으면 모든 약수의 합을 반환하는 문제다.for문을 돌려 나머지 0인 수를 더해주면 된다.약간의 성능을 위해 n/2 까지만 for문을 돌렸다.그런데 여기에 filter 라는 것을 적용할 수 있다.filter는 배열에서
오늘은 알고리즘 문제풀이 가이드 세션이 있었다. 이 과정으로 처음 프로그래밍을 접하는 사람들도 많기 때문에 주로 입문에 맞춘 설명이었다. 같이 간단한 예제를 풀어보고 설명해주고, 알고리즘 풀이에 대한 접근을 제시해주었다. 그리고 이 과정이 끝날 때 백준 골드, 프로그래
오늘은 계산기 과제로 바쁜 관계로 알고리즘 1문제만 간단히 살펴보자.하샤드 수는 각 자릿수의 합으로 자신이 나누어 떨어지는 수다. 판별하여 불리언을 반환하는 문제다.수를 toString 하고 for문 돌려서 자릿수를 합해 나누어떨어지는지 판별했다.로직은 개선할 부분이
오늘은 계산기 과제의 제출일이었다. 과제에 대한 얘기를 두서없이 그냥 주저리 주저리 적어보려 한다.Lv1: Calculator 클래스에 가감승제 연산을 수행하도록 하고, 이를 이용하여 연산 진행 및 출력Lv2: 계속해서 입력받고, 출력값에 추가 연산을 가능하도록 하기L
시작과 동시에 튜터님의 호출을 받았다. 계산기 과제를 왜 이렇게 어렵게 풀었냐고 하셨다. 그리고 변수도 ll, dd 등 보기 어렵게 적어놨다는 얘기를 들었다. 그 말을 듣고 아차 싶었다. 나 혼자 보고 마는 알고리즘 풀이 같은 코드가 아닌, 과제로서 제출하고 누군가가
어제 고민하던 클래스 설계 부분을 팀장님과 상의했다. (이렇게 쓰니까 무슨 회사 얘기같네 ㅋㅋ..) 팀장님도 정확히 같은 지점을 고민하고 있었다. 자식 클래스로 나누긴 했는데, 정작 부모와 다른 점이 없어서 자식클래스는 비어있다는 것이었다. 결국 함께 튜터님을 찾아가봤
데일리 스크럼 때 깃헙 팀 레포에 안드로이드 빈프로젝트를 만들고 각자 브랜치에 각자 소스파일을 올렸다. 분명히 별 거 아닌 일임에도 불구하고 폴더가 사라지고 에러가 터졌다. 항상 처음 환경 설정하는 부분이 어렵다. 팀원 한 명이 제대로 실행되는 버전을 올리고 거기서 p
일단 어제 생각했던, 쿠폰 적용 방법 변경부터 했다. 간단한 변경이라고 생각했는데 생각보다 건드릴 부분이 많았다. 특히, 하나의 장바구니에 대해 쿠폰이 적용되고 리셋되어야 하고, 쿠폰 적용 최소 주문금액 정보도 장바구니에 기록해야하다보니, 장바구니를 클래스로 만들어주어
키오스크 팀 과제의 제출일이다. 데일리 스크럼부터 바로 팀원 모두 달라붙었다. 코드 구조를 성공적으로 갈아 엎은 팀장님의 코드를 기반으로 함께 기능 추가, 수정을 했다. 그 과정에서 충돌이 터져서 이를 해결하느라 머리를 맞대기도 했다. 정오까지 중간제출이라, 정신없이
챕터가 바뀌며 조가 재편성되었다. 새로운 조원들과는 아직 별로 대화를 해보지 못했지만 일단 다들 낯을 가리는 편으로 보인다. 다들 비전공인지라 조장을 맡게 되었다. 열심히 해야겠다.저번주차까지는 코틀린 문법에 대한 내용이었다면 이제부터는 앱개발 과정으로 들어간다. 3주
어제에 이어 앱개발 입문 강의를 듣고 있다.지금까지 UI를 신경쓰며 개발한 적은 많지 않았는데, 앱을 만드는 과정은 UI가 반 이상이라고 한다. 개인적으로 코드를 쳐다보며 최적화하는 것에 흥미가 있는 편인데, UI를 꾸미려니 머리가 아파오는 느낌이다. 그렇다고 백엔드는

오늘은 앱개발 입문주차 강의를 마저 듣고 과제를 작성했다.사용자와 상호작용할 수 있는 화면을 제공하는 애플리케이션의 구성요소이다.전화걸기, 사진찍기, 이메일 보내기, 지도 보기 등이 이에 해당한다.AndroidManifest.xml 파일 보면 application에 a
어제에 이어 마저 과제를 작성했다.Lv4는 회원가입 페이지에서 입력한 아이디 비밀번호를 로그인 페이지로 돌아왔을 때 자동으로 입력되어있게끔 하는 기능이고, Lv5는 로그인을 하고 들어간 프로필 페이지에서 이미지가 5개 중 랜덤으로 나타나게 하는 기능이다.register
추가과제를 하느라 정신차려보니 지나가있던 하루였다.먼저 포커스 아웃, 실시간 입력을 하나의 함수로 몰아넣고 자잘한 것들을 손본 뒤, 비밀번호 입력 처리에 매달렸다. 그런데 이것만 하는데도 하루가 다 지나가버렸다니... 믿기지 않는다. 기능 자체가 어렵다고는 할 수 없지
월요일이다. 발제가 있을 줄 알았지만 없었다. 대신 커여운 강의를 드리겠습니다. 챌린지반의 첫 강의가 있었다. 추가과제였던 회원가입 페이지의 구현에 대해 3명을 골라 발표를 시키고 튜터님의 구현을 보여주셨다. 어려운 것들은 아니라, 설명을 들으니 어느정도 이해가 갔다.
뭔가 집중이 안되었던 하루였다.. 어제 과제를 거의 다 만들어놓았으니 오늘은 덜 된 부분을 마저 만들고 손보면 거의 끝나는 일정이었다. 그런데 오늘따라 왜이리 코드가 안읽히는지. 계속 쳐다는 보고 있는데, 내용이 전혀 머릿속에 들어오지 않는다. 코드를 몇 줄 읽다가도
앱개발 입문 개인과제 중간제출일이다. 점심까지 제출하고 공개된 해설영상을 시청했다. 크게 수정할 부분은 없었고, 문자열만 xml로 처리해주면 되겠다. 그런데.. 뭔가 오늘 사부작사부작 한 것 같은데 한 게 없다. 그러니 문제풀이를 살펴보자.https://sch
오늘은 스탠다드반 강의를 시청했다. 스탠다드반 강의까지 듣고 보니 챌린지반 강의는 정말 '정규과정 이외의 추가사항'이라는 느낌이다. 안드로이드를 첫 입문하는 입장에서는 스탠다드반 강의도 함께 들어야 할 것 같다. IDE 사용 팁이나, 좀 더 원론적인? 내용들도 알려주시
오늘은 공부를 별로 하지 못했다..집에 수도관이 얼어서 그걸 해결하느라고 내내 고생했다...selector나 간단하게 알아보자.이렇게 사용한다.버튼처럼 활용하려면 findViewById<ConstraintLayout>으로 레이아웃 아이디를 가져와서 똑같이 setO
앱개발 기초 팀프로젝트 주간이다. SNS 앱 만들기가 주제로 나왔다. 팀원들과 회의를 하고, S.A를 작성하고, 깃헙 레포를 만들고, 에러를 해결하고 나니 뭔가 진이 빠져버렸다.. 오늘은 일찍 자고 내일부터 힘내보자.
주로 팀에서의 깃 사용에 관한 문제 해결에 힘쓰고 있다. 협업을 하면서 충돌은 당연하게도 발생하고 있고, 충돌뿐만 아니라 환경 차이로 인한 실행 오류 문제 등도 발생하고 있다. 아무래도 터미널과 명령어를 통해 깃을 사용하기는 어려워서 안드로이드 스튜디오의 깃 GUI 툴
계속해서 팀과제에 매진하고 있다.뭔가 하루종일 작업하고 있지만 개인적으로는 기능 구현을 별로 하지 못하고 있다. 협업하면서 발생하는 충돌 처리와, 병합 과정에서 잘못하여 발생하는 오류, 실행이 안되는 오류 등등 팀적으로 관리해야할 부분이 계속해서 생긴다. 그리고 협업이
새해가 밝았다. 이 글을 보는 모두 새해 복 많이 받으시길 바란다.오늘은 앱개발 기초 팀프로젝트의 발표회가 있는 날이다. 프로젝트 종료일이니만큼 회고 형식으로 작성하겠다.어제가 과제 제출일이었어서 1월 1일이 월요일인 황금연휴였지만 연휴따위 give dog 해버리고 과
앱개발 숙련 주차가 시작됐다. 새로운 팀원들과 새로운 출발을 하게 되었다. 그리고 챌린지반도 MVVM 패턴을 배우며 안드로이드를 본격적으로 다룬다는 느낌이다.앱개발 숙련 1주차 첫 내용인 viewBinding을 정리해봤다.viewBinding은 findViewById를
오늘은 OOP 세션 2회차가 있었다.1회차에서 객체지향이 무엇인지에 대해서 다루었다면 오늘은 디자인 패턴에 대한 것이었다.여러 디자인 패턴이 있는데, 4가지에 대해서 다뤘다.프로그램 내에서 인스턴스가 하나만 존재해야 하고 어디에서든 인스턴스에 접근할 수 있도록 해주는
오늘은 by lazy, lateinit에 대한 것과, 리스트뷰, 그리드뷰, 리사이클러뷰를 공부했다. 오늘 하루 굉장히 집중해서 보냈는데, 하고 보니 많지도 않은 것 같다. 후...lateinit과 by lazy에 대해서는 viewBinding 글에 추가하여 적어놓았다.
MVVM은 아직 감을 못잡고 있다. (사실 이제 시작해서 그렇기도 하다)일단 당장은 과제가 급한지라 오늘은 fragment 부분 강의를 들었다. 프래그먼트 자체도 생소하고, 데이터 전달도 볼 게 좀 있어서 하다보니 오늘 하루가 다 가버렸다.액티비티에 대한 뷰모델 클래스
숙련주차 개인과제를 뽀개고 있다. 의외로 기능들이 간단간단하게 해결이 되어서, 쭉쭉 진도를 뽑을 수 있었다. 다만 뒤로가기 버튼을 눌렀을 때 종료 확인 다이얼로그를 띄우기 위해서 onBackPressed()를 사용했는데, deprecated 된 것이 신경쓰였다. 알아보
갈수록 바빠지는 것 같다. 그런데 바쁜데 반해 뭔가 성과는 안나오는 것 같다... 더욱 집중해보도록 하자.어제는 숙련 개인과제 제출일이었다. 그 마켓 UI를 베이스로 주어진 과제를 최대한 정밀하게 따라 만들고,리사이클러뷰로 아이템 나열텍스트 말줄임표다이얼로그알림천단위
팀플 2일차다. 어제 SA를 간단하게 작성하고 어제 오늘 레이아웃을 짜면서 슬슬 구현을 들어가기 위해 브랜치를 합치려던 찰나, 튜터님의 피드백이 들어왔다. 프로젝트 스코프가 너무 작다는 것이다. 원점으로 돌아가 회의를 시작해서, 대략적으로만 만들어둔 피그마 와이어프레임
오늘 하루종일 알림만 만졌다.기존 과제였던 얄림 코드도 손볼 부분이 있어서 점심까지 진행했고, 시간 예약하여 알림을 구현하려면 알람 매니저와 리시버를 활용해야 했는데, 이를 적용하는 것이 시간이 오래걸렸다. 항상 코드 양은 많지도 않은데, 이상하게 오래 걸리는 것 같다
숙련주차 팀플의 발표회가 있었다.입문에 이어 이번에도 팀장과, 발표를 맡았다. 시연이 2분으로 가이드가 되어있었는데, 시연영상에서 설명하고 싶은 것들이 많다보니, 3분 가량이 걸린 것 같다. 그러다보니 나머지에 쓸 시간이 부족해져서, 트러블 슈팅 등을 설명할 시간이 부
새로운 팀원을 만났다. 슈퍼맨이라 불리는 분과 같은 조가 되었다. 벌써부터 범상찮은 포스가 보인다. 나도 더욱 열심히 해야겠다는 마음이 절로 생긴다.Preference란?앱 설정 등 데이터를 영구 저장하기 위해 사용. XML 포맷의 텍스트 파일에 키-값 세트로 저장한다
멀티스레드랑 싱글턴에 대해 공부하다보니 하루가 훌쩍 가버렸다. 레트로핏도 얼른 봐야하는데...구글맵 예제 코드 손보고 정리하는 것도 오래 걸렸다..console.cloud.google.com에서 API 키를 발급받아야 하고, 라이브러리에서 Maps SDK for And
진도가 너무 느리다... 난 왜이렇게 느릴까 ViewPager2 예제 implementation("androidx.viewpager2:viewpager2:1.0.0") 는 할 필요가 없다. 기본적으로 뷰페이저2 들어있음. 디자인탭에서 꺼내쓰면 됨. 먼저 레이아웃을
저장소 패턴 공부하느라고 과제를 못하고 있다.. 어떡하지 이번 과제.. Retrofit 예제 https://velog.io/@jericho3/Retrofit-example
이번 과제는 망했다 저장소 패턴 https://velog.io/@jericho3/repository-pattern
최종 프로젝트가 시작되었다.지금까지는 주제가 정해져있었기에 거기에서 변형해서 만들면 됐는데, 최종은 아예 자유이다보니 어떤 앱을 만들지 정하는 것부터가 난관이었다.어찌저찌하여 기획을 짜고 피그마를 작성하고 있었는데, 주변 조들이 잇따라 반려당했다는 소식이 들려와서 매우
최종 프로젝트가 시작하고 3일째인 수요일이지만 여전히 피그마, WBS를 하고 있다. 다행히 능력자 리더님께서 피그마를 하드캐리하고 계셔서 예쁜 UI가 만들어지고 있다. 그동안 나는 서울공공api를 파보고, 레트로핏을 구현하고 있다. 그런데 종합으로만 받아오면 될 줄 알
어제 오늘 디자인 피드백이 진행됐다. 어제 디자인 튜터님의 핑거스냅에 우리의 피그마는 절반이 날아갔다. 이후 수정을 하면서 UI는 시원하게 해결되지 않았고, 오늘 피드백을 받고 나서도 약간 갈팡질팡하고 있다. UI/UX 디자인이 너무나도 힘들다...개발쪽으로는 서울공공
주말 동안 서울공공데이터를 2천개 받아오도록 UseCase를 변경하면서 병렬처리를 다뤘다. 한 번의 요청에 천개까지 가져올 수 있었기에 두 번의 요청으로 나눠보내야 했는데, 순차적으로 받으려면 오래걸리니 병렬로 보내고자 했고, 병렬처리를 위해서 async, await를
내가 맡은 페이지보다는 전체적으로 기반이 되는 것들을 먼저 다루느라 바빴던 한 주였다.데이터 통신에 문제가 있는 경우를 위한 Room 데이터 활용, API 시간제한 및 try catch 예외처리, 저장한 서비스 관련 SharedPreferences Repository에
중간발표 이후, 버그 수정 및 부족한 부분을 보완하느라 바쁜 한 주였다.추천페이지의 리팩토링을 돕느라 많은 시간을 썼고, 마이페이지 구현에서도 간단해보이는 프로필 정보 변경 기능이 의외로 골치가 아팠다. 이렇게 골치가 아파가며 만들었지만 리팩토링이 절실한 상태로밖에 만
드디어 최종 프로젝트의 발표와 함께, 길다면 길고 짧다면 짧은 약 5개월간의 내일배움캠프가 종료되었다.우리 팀이 만든 앱은 상당히 만족하고 있다. 거의 계획한대로 기능들이 잘 들어갔고, 버그도 없으며 실용성도 좋다. 추후에도 필요한 사람이 계속 이용할 수 있는 앱으로

try catch 문을 쓰면서 어떤 문제로 catch가 됐는지 로그를 찍고 싶을 때, 로그의 메시지 부분에 "$e" 로 출력을 해왔는데, Log에는 throwable을 매개변수로 받아서 출력해주는 좋은 기능이 있었다.로그의 세 번째 매개변수로 throwable을 넘겨주
개발을 하다보면 확인을 위한 로그나 에러 상황 체크를 위한 로그 등 수많은 로그를 찍게 된다. 하지만 이 로그 중 대다수는 릴리즈에서는 필요가 없고, 오히려 내부 정보를 노출하게 된다. 그렇다고 배포 버전마다 일일이 로그를 모두 지우기도 힘들고, 놓치는 로그도 있을 것
컴포즈 기본 코드로 시작하는 방법은 간단하다.안드로이드 스튜디오에서 새 프로젝트를 만들 때 Empty Activity를 선택해서 만들면 기본적으로 컴포즈를 사용하도록 구성되어있다.뷰? 위젯? 구성요소? 뭐라 불러야 할지 모르겠는데 아무튼 이걸 Surface로 감싸서 c
RecyclerView와 동일한 것이 바로 LazyColumn과 LazyRow 다.세로 리사이클러뷰 안에 가로 리사이클러뷰를 넣으면서 클릭 이벤트 등 골치를 썩였는데, 컴포즈를 쓰면 아주 간단해질 것 같다.참고: import 할 때 Android 스튜디오는 기본적으로
두서없이 적는 TIL. 필기 저장 목적이다.코너를 둥글게 만드는 것은 Card로도 가능하고 Surface로도 가능한 것 같다.컴포즈 수정자가 궁금하면 공식 문서를 참고해봐도 좋겠다.https://developer.android.com/develop/ui/com
컴포즈에서도 ConstraintLayout을 사용할 수 있다.다만 순정(?) 컴포즈에서는 없고 따로 라이브러리?를 사용해야 한다.ConstraintLayout을 사용하려면 컴포저블 함수에서 아래처럼 사용하면 된다.그냥 다른 컴포저블 쓰는 것과 같다.제약을 사용하려면 i
xml의 EditText는 컴포즈에서 TextField가 되었다.처음 TextField를 사용하면 당황스러운 점이, 기본적으로 입력이 되지 않는다.컴포즈는 입력값도 직접 변수로 통제해줘야 하기 때문이다.따로 String에 대한 MutableState 변수 등을 만들어
\[드로이드나이츠 2021] 이기정 - 안드로이드 앱에서 Koin걷어내고 Hilt로 마이그레이션하기https://www.youtube.com/watch?v=G2gaUnFGGV0이 세션 내용을 정리해보자.(참고로 영상에서는 실제 예시 코드도 보여주니 필요
https://developer.android.com/guide/navigation?hl=ko탐색에 필요한 종속성https://developer.android.com/guide/navigation/navcontroller?hl=ko컴포저블 계층 구조에
https://developer.android.com/kotlin/flow?hl=kohttps://developer.android.com/kotlin/flow/stateflow-and-sharedflow?hl=koStateFlow와 SharedFlow
Moshi는 Gson을 대체하는 Json converter 라이브러리이다.Gson보다 성능이 좋고, 에러 메시지를 더 잘 보여주는 등 장점이 많다.다만 Gson은 Date 타입을 받는 반면 Moshi는 못받기 때문에 String으로 받고 따로 변환을 해줄 필요가 있다.
'농부의 꿈' 앱에서 게시글 작성 시 이미지 업로드를 하면 이미지 각각을 업로드 api 통신하고 업로드된 url을 받아서 저장한 후, 게시글 등록할 때 이미지 url 리스트를 포함해서 보내도록 하고 있다.이 때 모든 이미지의 업로드 통신 과정이 끝나서 url을 다 받지