TIL : 2023-08-24

이슬비·2023년 8월 24일
0

TIL

목록 보기
35/88

TIL : 스파르타코딩 Android 과정 7기

주의점

  • 매일 : TIL : today I learned 작성하기
  • github에 issue 꼼꼼히 쓰기
  • 주석 잘 적어 넣기
  • 발표시간 준

학습 목적 :

  1. Android 입문 학습에 이어 드디어 숙련주차가 시작됩니다. 2주동안 Android 앱개발 입문 학습을 바탕으로 개인과제와 팀 프로젝트를 완료함으로써 우리는 이제 막 숙련 학습을 위한 첫 허들을 넘었습니다. 든든한 기초 체력을 이용해서 앱개발 숙련주차도 섭렵해보도록 합시다!
  2. 앱개발 과정은 총 3가지(입문/숙련/심화)로 구성되어 있습니다. 그 중 우리는 이제 절반 왔습니다. 숙련 주차를 시작하게 되는 것이에요!
  3. 앱개발 숙련 과정을 통해서는 Android의 뷰바인딩과 어댑터뷰, 프래그먼트 등에 대해 배우게 됩니다.
  4. 숙련 과정에서 프래그먼트와 액티비티의 차이와 생명주기를 이해하고 다뤄보며 지식과 경험을 쌓습니다.

학습 목표 :

  • 뷰바인딩에 대해 이해하고 findViewById와의 차이점을 설명할 수 있습니다.
  • 어댑터 뷰의 기본 개념 및 종류를 이해하고 리스트 뷰와 그리드 뷰의 설정 방법을 이해한다.
  • 커스텀 항목 뷰를 정의하는 방법을 이해하고 RecyclerView를 사용하는 방법을 이해한다.
  • 프래그먼트의 기본개념 및 프래그먼트 생명주기를 이해한다.
  • 태블릿용 및 스마트폰용 디바이스에서 프래그먼트를 재 사용할 수 있는 방법을 실습한다.
  • 다이얼로그가 무엇인지 알고 구조에 대해 이해했습니다.
  • 알림을 생성하고 중요도 순서를 이해했습니다

오늘 계획 :

  • 오전

    • 09:00 ~ 10:00 : 오늘 계획 확인하기 + 팀 회의
      • 오늘 계획 (Task)
        • 팀 회의 : 데일리 스크럼
        • 알고리즘 문제 1개 풀기
        • 앱 개발 숙련 : 강의 듣기
        • TIL 작성하기
        • 팀 회의 : 마무리 회고 진행
    • 10:00 ~ 10:30 : 알고리즘 문제 풀기
      • 문제 1 : 중복된 문자 제거
    • 10:30 ~ 12:00 : 복습하기
      • 1-1 : 뷰 바인딩
  • 집중 코딩

    • 13:00 ~ 18:00 : 앱 개발 숙련 강의 듣기
      • 1-3 : 커스텀 뷰, 리사이클러 뷰
  • 저녁

    • 19:00 ~ 20:30 : TIL 작성하기 & 노션 정리하기
      • TIL 작성하기
    • 20:30 ~ 21:00 : 마무리 회고 진행
      • 팀 회의 : 마무리 회고 진행

요점 정리 :

RecyclerView

// gradle/depencise 
implementation("androidx.recyclerview:recyclerview:1.2.1")
// For control over item selection of both touch and mouse driven selection
implementation("androidx.recyclerview:recyclerview-selection:1.1.0")

사용 기능 :

// List.distinct()  중복된 요소를 제거
val list = listOf('a', 'b', 'c', 'a', 'c')
println(list.distinct()) // [a, b, c]

알고리즘 :

https://school.programmers.co.kr/learn/courses/30/lessons/120888

//다른 사람의 풀이
class Solution {
    fun solution(my_string: String): String = my_string.toList().distinct().joinToString("")
}

팀(or 개인) 프로젝트 :

후발대 개인 과제 : 리사이클러뷰 이용하여 연락처 리스트 앱 만들기

  1. 레이아웃 요구사항
    • 메인 화면에는 RecyclerView 하나만 표시합니다.
    • 연락처 아이템 레이아웃에는 사진, 이름, 전화번호를 표시하는 뷰가 포함되어야 합니다.
  2. 데이터 모델 요구사항
    • 연락처 클래스: 사진, 이름, 전화번호, 즐겨찾는여부 필드를 포함합니다.
  3. 더미 데이터 요구사항
    • 10명 이상의 연락처 더미 데이터를 생성합니다. 각 연락처는 사진, 이름, 전화번호, 즐겨찾기여부를 포함해야 합니다.
  4. 어댑터 요구사항
    • 어댑터 클래스: RecyclerView.Adapter를 확장합니다.
    • 연락처 데이터를 바인딩하는 로직이 포함되어야 합니다. → ViewBinding 활용 해보기
    • 데이터모델의 즐겨찾는 여부에 따라 viewType을 나눠 표시해보세요 (즐겨찾기) ViewType은 총 두개입니다.
  5. RecyclerView 설정 요구사항
    • 메인 활동에서 RecyclerView를 어댑터와 연결하고, 더미 데이터를 로드하여 표시합니다.
    • 추가 선택 과제
      • 실제 폰에 있는 연락처를 불러옵니다. (READ_CONTACTS 권한이 필요합니다.)
  6. 아이템 클릭 이벤트 처리 요구사항
    • 추가 선택 과제
      • 전화를 걸어 봅시다 (hint : tel://, runtime permission)

앱 개발 숙 : 개인 과제 : 사과 마켓 만들기

메인 페이지 만들기

  • 디자인 및 화면 구성을 최대한 동일하게 해주세요. (사이즈 및 여백도 최대한 맞춰주세요.) ✨
  • 상품 데이터는 아래 dummy data 를 사용합니다. (더미 데이터는 자유롭게 추가 및 수정 가능)
  • 데미데이터 : 이미지 링크, 상품 리스트 링크
  • RecyclerViewer를 이용해 리스트 화면을 만들어주세요.
  • 상단 툴바를 제거하고 풀스크린 화면으로 세팅해주세요. (statusbar는 남기고)
  • 상품 이미지는 모서리를 라운드 처리해주세요.
  • 상품 이름은 최대 두 줄이고, 그래도 넘어가면 뒷 부분에 …으로 처리해주세요.
  • 뒤로가기(BACK)버튼 클릭시 종료하시겠습니까? [확인][취소] 다이얼로그를 띄워주세요. (예시 비디오 참고)
  • 상단 종모양 아이콘을 누르면 Notification을 생성해 주세요. (예시 비디오 참고)
  • 상품 가격은 1000단위로 콤마(,) 처리해주세요.
  • 상품 아이템들 사이에 회색 라인을 추가해서 구분해주세요.
  • 상품 선택시 아래 상품 상세 페이지로 이동합니다.
  • 상품 상세페이지 이동시 intent로 객체를 전달합니다. (Parcelize 사용)

상세 페이지 만들기

  • 디자인 및 화면 구성을 최대한 동일하게 해주세요. (사이즈 및 여백도 최대한 맞춰주세요.) ✨
  • 메인화면에서 전달받은 데이터로 판매자, 주소, 아이템, 글내용, 가격등을 화면에 표시합니다.
  • 하단 가격표시 레이아웃을 제외하고 전체화면은 스크롤이 되어야합니다. (예시 비디오 참고)
  • 상단 < 버튼을 누르면 상세 화면은 종료되고 메인화면으로 돌아갑니다.

선택 과제

1. 스크롤 상단 이동!

  • 스크롤을 최상단으로 이동시키는 플로팅 버튼 기능 추가
  • 플로팅 버튼은 스크롤을 아래로 내릴 때 나타나며, 스크롤이 최상단일때 사라집니다.
  • 플로팅 버튼을 누르면 스크롤을 최상단으로 이동시킵니다.
  • 플로팅 버튼은 나타나고 사라질때 fade 효과가 있습니다.
  • 플로팅 버튼을 클릭하면(pressed) 아이콘 색이 변경됩니다.

2. 상품 삭제하기!

  • 상품을 롱클릭 했을때 삭제 여부를 묻는 다이얼로그를 띄우고
  • 확인을 선택시 해당 항목을 삭제하고 리스트를 업데이트한다.
  • 해당 상품이 삭제되었는지 확인!!

3. [찐도전과제] 좋아요 처리!! ← 많은 고민이 필요합니다.

  • 상품 상세 화면에서 좋아요 선택시 아이콘 변경 및 Snackbar 메세지 표시
  • 메인 화면으로 돌아오면 해당 상품에 좋아요 표시 및 좋아요 카운트 +1
  • 상세 화면에서 좋아요 해제시 이전 상태로 되돌림

아쉬운 점 or 앞으로의 계획 :

숙련 강의 다시 한 번 복습하기

profile
개발꿈나무

0개의 댓글