Giter Site home page Giter Site logo

usplashclonewithcompose's Introduction

Unsplash Clone _ with compose

  • SDK Version Min 26
  • Target 33

๐Ÿ“ข API KEY ๊ฐ’์„ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

  • https://unsplash.com/developers ์—ฌ๊ธฐ์„œ 'Register as a developer'๋กœ API ACCESS_KEY๋ฅผ ๋ฐฐ์ • ๋ฐ›์œผ์‹  ํ›„, local.properties์— ACCESSKEY = YOUR_ACCESS_KEY๋กœ ์ž…๋ ฅ

1. ํ”„๋กœ์ ํŠธ ์„ค๋ช…

  • ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ถ๋งˆํฌ๋กœ ์ˆ˜์ง‘ํ•˜๋Š” Unsplash ํด๋ก  ์•ฑ

  • photo

  • ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ API (https://api.unsplash.com/search/photos)์˜ results ํ•„๋“œ

  • UI๋Š” (Search, Detail, Bookmark)3๊ฐœ์˜ Screen์„ ์‚ฌ์šฉ

* ์ฒซ ๋ฒˆ์งธ Screen : ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ
- ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๊ฒ€์ƒ‰๋œ ์ด๋ฏธ์ง€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ทธ๋ฆฌ๋“œ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ด๋•Œ, ๋ถ๋งˆํฌ๊ฐ€ ๋œ ์•„์ดํ…œ์˜ ๊ฒฝ์šฐ, ๋ถ๋งˆํฌ ์•„์ด์ฝ˜๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ
- ์Šคํฌ๋กค์„ ํ†ตํ•ด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
- ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ Detail Screen์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

* ๋‘ ๋ฒˆ์งธ Screen : ์ƒ์„ธ ํ™”๋ฉด 
- ์„ ํƒํ•œ ์ด๋ฏธ์ง€์˜ ์ƒ์„ธ ์ •๋ณด(id, author, width*height, create at)๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
- ์ด๋ฏธ์ง€๋ฅผ ๋ถ๋งˆํฌ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ €์žฅ๋œ ๊ฒƒ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

* ์„ธ ๋ฒˆ์งธ Screen : ๋ถ๋งˆํฌ ๋ฆฌ์ŠคํŠธ
- ๋ถ๋งˆํฌ๋กœ ์ €์žฅ๋œ ์ด๋ฏธ์ง€๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.
- ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ Detail Screen์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์‚ฌ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Jetpack Compose (UI)
  • Kotlin DSL (Gradle)
  • Retrofit2 (API ํ†ต์‹ )
  • Room (SQLite DB)
  • Paging3 (ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ)
  • Hilt (DI)
  • Moshi (JSON ํŒŒ์‹ฑ)
  • Glide for Compose (์ด๋ฏธ์ง€ ํ‘œ์‹œ)
  • Timber (๋กœ๊ทธ)

3. ํ”ผ๋“œ๋ฐฑ

F 1) ViewModel -> Repository ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€์—ฌ ๋„๋ฉ”์ธ ๋กœ์ง์ด VM ์—์„œ ์ฒ˜๋ฆฌ๋˜๊ธฐ์—, ๋ถ๋งˆํฌ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ๋กœ์ง์„ ๊ฐ VM ๋งˆ๋‹ค ์ž‘์„ฑํ•ด์•ผํ•  ๊ฒƒ๋“ค์„ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

A: ๋ถ๋งˆํฌ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ๋Š” Detail Screen ํ•œ๊ณณ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ํ”ผ๋“œ๋ฐฑ์€ ์–ด๋–ค ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋‚ด์šฉ์ธ์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ„๋‹ค.
๋ถ๋งˆํฌ๊ฐ€ ์‚ฌ์ง„ ์šฐ์ธก ์ƒ๋‹จ์— ํ‘œ์‹œ๋˜๋Š” ๊ฑฐ๋ผ๋ฉด, DTO์— ์กด์žฌํ•˜๋Š” ๊ฐ’์— ์˜ํ•ด ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์ด์ง€ VM์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ๋ณ„๋„์˜ ๋กœ์ง์€ ์—†๋‹ค.
์•„๋‹ˆ๋ฉด ์ด๊ฒƒ๋„ Screen State๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ผ๊นŒ? ๊ทธ๋Ÿผ ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ state๊ฐ€ ๋” ๋Š˜์–ด๋‚˜์ง€ ์•Š์„๊นŒ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์ด ๋ถ€๋ถ„์€ MVI ์•„ํ‚คํ…์ณ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ๋ฒˆ์ฏค ๊ณ ๋ คํ•ด ๋ณผ๋งŒํ•œ ์š”์†Œ์ด๊ธด ํ•˜๋‹ค. ์ข€๋” ์ƒ๊ฐํ•ด ๋ณด๊ฒ ๋‹ค.

F 2) PhotoSearchRepo ์˜ ์„ค๊ณ„๊ฐ€ Photo search ๋ฟ ์•„๋‹ˆ๋ผ bookmark ์ฒ˜๋ฆฌ ๋“ฑ ๋งŽ์€ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์กฐ๊ธˆ๋” ์„ธ๋ถ„ํ™” ํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

A: ์ด๊ฒƒ๋„ ๋‚˜๋ˆŒ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ฃผ์š” ๊ธฐ๋Šฅ์ด 2๊ฐœ๋ฟ์ธ ๋‹จ์ˆœํ•œ ์•ฑ์—์„œ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ํŒŒ์ผ ์ˆ˜๋งŒ ์ฆ๊ฐ€์‹œํ‚ฌ ๋ฟ์ด๋ผ๋Š” ์ƒ๊ฐ์— ๋‚˜๋ˆ„์ง€ ์•Š์•˜๋‹ค. ๋ฌผ๋ก  ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•˜๋ฉด ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋งž๋‹ค.

F 3) ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ ์žˆ์–ด, API ๋ฐ DB ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ๊ฐ™์•„ ๊ณผ๋„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œ ํ•˜๋Š”๋ถ€๋ถ„๋„ ๊ณ ๋ฏผํ•ด๋ณผ ํฌ์ธํŠธ ๊ฐ™๋‹ค.

A: ๊ฒฐ๊ตญ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” id, Author, width, height, url, bookmark ์—ฌ๋ถ€๋กœ 6๊ฐœ ๋ฟ์ด๋‹ค. ์•ฑ์—์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์–ด๋Š ๋ถ€๋ถ„์—์„œ ๊ณผ๋„ํ•˜๊ฒŒ ๋Š๊ปด์ง€๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.

F 4) DI ๋ฅผ Object ์•ˆ์— ๊ตฌํ˜„ํ•˜๋ฉด DI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ๋งŽ์ด ์—†์–ด๋ณด์ธ๋‹ค.

A: ์ด ํ”ผ๋“œ๋ฐฑ์€ Hilt/Dagger์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค.
๊ณต์‹๋ฌธ์„œ ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•œ ๊ตฌ๊ธ€์ด ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹
๊ฐ™์ด ๋ณด๋ฉด ์ข‹์€ CodeLabs์˜ ์‹ค์Šต ์˜ˆ์‹œ: https://developer.android.com/codelabs/android-hilt?hl=ko#6

F 5) MainActivity ๋‚ด๋ถ€์— ๋ชจ๋“  ํ™”๋ฉด์— ๋Œ€ํ•œ UI ๊ตฌํ˜„์ด ์žˆ๋Š” ๋ถ€๋ถ„๋„ ์•„์‰ฝ๋‹ค.

A: Screen 3๊ฐœ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ UI๋ฅผ ๊ตฌ๋ถ„์ง“๋Š” ๊ฒƒ์„ ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ๋‹ค. ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ”ผ๋“œ๋ฐฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์ด๊ฑด ๊ฐœ์ธ์˜ ์Šคํƒ€์ผ ์ฐจ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

usplashclonewithcompose's People

Contributors

parade621 avatar

Stargazers

 avatar

Watchers

 avatar

usplashclonewithcompose's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.