TIL : 2023-09-12

이슬비·2023년 9월 12일
0

TIL

목록 보기
46/88

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

주의점

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

학습 목적 :

  1. 심화 과정을 통해서는 Android의 데이터 저장, 위치 정보 활용 등에 대해 배우게 됩니다.
  2. 심화 과정에서 실전 앱 만들기와 같은 예제를 직접 만들어보며 손에 코드를 익히고 디버깅 경험을 쌓습니다.

학습 목표 :

  • Preference에 대해 이해하고 설명할 수 있습니다.
  • DataBase에서 Room의 주요 3요소에 대해 알고 DAO 생성을 할 수 있다.
  • 사용자의 위치정보를 얻기 위한 설정들을 직접 이용 해보고 적용한다.
  • 공공API를 이용하여 JSON데이터를 가공하여 앱을 만들어 볼 수 있다.
  • 실제 앱 개발 프로세스에 전반에 대해 이해하고 학습한다.
  • 디버깅에 대해 알고 디버깅 도구로 문제를 분석하고 수정합니다.

오늘 계획 :

  • 오전
    • 09:00 ~ 10:00 : 팀 회의 & 오늘 계획 세우기
      • Android 앱개발 심화과정 발제
        • 예제는 꼭 직접 작성해 보기
        • 추가 학습으로 이번 강의 이해도 높이기
      • 오늘 계획 (Task)
        • 9시 : Android 앱개발 심화과정 발제 : Zoom
        • 새로운 팀 발표 : 팀 회의
          • Team Notion 작성
        • 11시 : 후발대 강의 듣기
        • 심화 과정 : 강의 듣기
        • 5시 : 원더윅스 컴퍼니 협력사 특강
        • 알고리즘 문제 1개 풀기
        • TIL 작성하기
        • 팀 회의 : 마무리 회고 진행
    • 10:00 ~ 10:30 : 팀 노션 작성하기
    • 10:30 ~ 11:00 : 팀 회의
      • 팀 회의
        • 팀 이름, 팀 목표, 팀 시간 약속
    • 11:00 ~ 12:00 : 후발대 강의
      • 후발대 6주차 강의
        • 라이프사이클
        • 확장함수
        • 후발대 과제
  • 집중 코딩
    • 13:00 ~ 17:00 : 심화 강의 듣기
      • 1-1 SharedPreferences
      • 1-2 Room
    • 17:00 ~ 18:00 : 원더윅스 컴퍼니 협력사 특강
  • 저녁
    • 19:00 ~ 19:30 : 마무리 회고 진행
      • 팀 회의 : 마무리 회고 진행
    • 19:30 ~ 21:00 : TIL 작성하기 & 알고리즘 문제 풀기
      • TIL 작성하기
      • 알고리즘 문제 풀기 :
        • 문제 1 : 영어가 싫어요

요점 정리 :

Android 앱개발 : 심화

1-1 SharedPreferences

  • 프로그램의 설정 정보를 저장
  • XML 포맷. 키-값 정보로 저장
		private fun saveData() {
        val pref = getSharedPreferences("pref",0)
        val edit = pref.edit() // 수정 모드
        // 1번째 인자는 키, 2번째 인자는 실제 담아둘 값
        edit.putString("name", binding.etHello.text.toString())
        edit.apply() // 저장완료
    }

    private fun loadData() {
        val pref = getSharedPreferences("pref",0)
        // 1번째 인자는 키, 2번째 인자는 데이터가 존재하지 않을경우의 값
        binding.etHello.setText(pref.getString("name",""))
    }

1-2 Room

  • SQLite를 쉽게 사용할 수 있는 데이터베이스 객체 매핑 라이브러리
  • Room의 주요 3요소
    • @Database: 클래스를 데이터베이스로 지정하는 annotation, RoomDatabase를 상속 받은 클래스여야 함
      • Room.databaseBuilder를 이용하여 인스턴스를 생성함
    • @Entity: 클래스를 테이블 스키마로 지정하는 annotation
    • @Dao: 클래스를 DAO(Data Access Object)로 지정하는 annotation
      • 기본적인 insert, delete, update SQL은 자동으로 만들어주며, 복잡한 SQL은 직접 만들 수 있음
  • Database :
    • RoomDatabase를 상속하여 자신의 Room 클래스를 만들어야 함
  • Entity : 테이블 스키마 정의 ( 스키마란? 데이터의 구조, 데이터베이스의 설계)
  • Dao :
    • DAO는 interface나 abstract class로 정의되어야 함
    • Annotation에 SQL 쿼리를 정의하고 그 쿼리를 위한 메소드를 선언
    • @Insert, @Update, @Delete는 SQL 쿼리를 작성하지 않아도 컴파일러가 자동으로 생성함
    • fun 앞에 suspend는 Kotlin coroutine을 사용하는 것임, 나중에 이 메소드를 부를 때는 runBlocking {} 내에서 호출해야 함
    • LiveData는 비동기적으로 동작하기 때문에 coroutine으로 할 필요가 없음

알고리즘 :

//다른사람의 풀이
class Solution {
    fun solution(numbers: String): Long {
        val sample = mapOf(
            "0" to "zero",
            "1" to "one",
            "2" to "two",
            "3" to "three",
            "4" to "four",
            "5" to "five",
            "6" to "six",
            "7" to "seven",
            "8" to "eight",
            "9" to "nine"
        )
        var result = numbers
        sample.forEach {
            result = result.replace(it.value, it.key)
        }
        return result.toLong()
    }
}

팀(or 개인) 프로젝트 :

후발대 과제 :

Activity Life cycle

  1. MainActivity에는 Activity 라이프사이클의 각 단계에 해당하는 메소드 (onCreate, onStart, onResume, onPause, onStop, onDestroy)를 오버라이드하고 각 메소드가 호출될 때 로그 메시지를 출력합니다.
  2. 메인 액티비티에는 두 번째 액티비티를 시작하는 버튼이 있어야 합니다.
  3. 두 번째 액티비티도 메인 액티비티와 동일한 라이프사이클 메소드를 오버라이드하고 로그 메시지를 출력합니다.

Fragment Life cycle

  1. Activity에는 Fragment를 추가하거나 제거하는 버튼들이 있어야 합니다.
  2. Fragment의 각 라이프사이클 메소드가 호출될 때마다 로그 메시지를 출력합니다.

**onCreate**

**onCreateView**

**onViewCreated**

**onViewRestored**

**onStart**

**onResume**

**onPause**

**onStop**

**onSaveInstanceState**

**onDestroyView**

**onDestroy**

모든 단계의 로그가 출력되는지 확인되면 완성입니다.

확장 함수

  1. Context 클래스를 확장하여 showToast라는 메소드를 작성합니다.

  2. 이 함수는 메시지(String)와 지속 시간(Int, 기본값은 Toast.LENGTH_SHORT) 두 가지 파라미터를 받습니다.

  3. 함수를 호출하면 해당 메시지의 Toast가 지정된 지속 시간 동안 화면에 나타나야 합니다.

    1. 지속시간을 변경할수도 있습니다
  4. MainActivity에서 이 확장 함수를 사용하여 토스트 메시지를 출력해봅니다.

    Ex : Hello World

심화과정 개인 과제 :

  1. 과제 설명
  • 이미지를 검색해서 보관함에 수집하는 안드로이드 앱.

  • 검색은 키워드를 입력하고 검색을 누르면 이미지 검색 결과 리스트를 보여줍니다.

  • 이미지 검색 API ( https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide#search-image ) 의 thumbnail_url 필드

  • UI는 fragment 2개를 사용합니다. (버튼이나 탭 선택 시 전환)

  • 첫 번째 fragment : 검색 결과

  • 검색어를 입력할 수 있습니다.

  • 검색된 이미지 리스트가 나타납니다. 각 아이템에는 이미지와 함께 날짜와 시간을 표시합니다.

     - 검색 결과는 최대 80개까지만 표시합니다.
    
     - 리스트에서 특정 이미지를 선택하여 '내 보관함'으로 저장할 수 있습니다.
     - 이미 보관된 이미지는 특별한 표시를 보여줍니다. (좋아요/별표/하트 등)
     - 보관된 이미지를 다시 선택하여 보관함에서 제거 가능합니다.
  • 두 번째 fragment: 내 보관함

  • 검색 결과에서 보관했던 이미지들 보입니다.

  • 마지막 검색어는 저장되며, 앱 재시작시 마지막 검색어가 입력 필드에 자동으로 입력됩니다.

  1. 개발 요건

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

  • Android 앱개발 심화 : 강의 듣기
  • Android 앱개발 숙련 : 복습하기
  • 후발대 과제 작성하기
  • Android 앱개발 심화 : 개인과제 작성하기
profile
개발꿈나무

0개의 댓글