๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/๐Ÿฟ ์˜ํ™” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์ผ์ง€

๐Ÿ›๏ธ[Android ์•ฑ ์•„ํ‚คํ…์ณ] : UI layer , Domain layer, Data layer

by hyeonha 2024. 3. 15.

๋ชฉ์ฐจ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

    ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ MVVM์œผ๋กœ ์žกํ˜€์žˆ์—ˆ๊ณ  ์ด์— ๋งž์ถ”์–ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋”๋”์šฑ MVVM์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์—ฌ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ์„  ๊ฐ layer๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๊ณ  ์–ด๋–ค ๋กœ์ง์„ ํฌํ•จํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋ถ€ํ„ฐ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด์ž!

     

    ๊ฐ ๋ ˆ์ด์–ด์˜ ์—ญํ• 

    1๏ธโƒฃUI ๋ ˆ์ด์–ด๋Š” ํ™”๋ฉด์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•ด์ค€๋‹ค. 

    2๏ธโƒฃ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋Š” ์•ฑ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ์ถœํ•ด์ค€๋‹ค.

    3๏ธโƒฃ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋Š” UI์™€ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

    ์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ์•„ํ‚คํ…์ณ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค. ํ™”์‚ดํ‘œ๋Š” ํด๋ž˜์Šค ๊ฐ„์˜ ์ข…์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋Š” ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ํด๋ž˜์Šค์— ์ข…์†๋œ๋‹ค. 

    di๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ํด๋ž˜์Šค์— ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์˜ ๊ฐ์ฒด๊ฐ€ ์‚ฝ์ž…๋œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

     

    ์ด์ œ ๊ฐ๊ฐ์˜ ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด์„œ ๋” ๊นŠ์ˆ™ ์ดํ•ดํ•ด๋ณด์ž 

    UI ๋ ˆ์ด์–ด

    UI ๋ ˆ์ด์–ด๋Š” ์•ž์—์„œ ๋งํ–ˆ๋“ฏ์ด ํ™”๋ฉด์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์—ญํ• ์„ ๊ฐ€์ง„๋‹ค. ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ, ๋„คํŠธ์›Œํฌ ์‘๋‹ต๊ณผ ๊ฐ™์€ ์™ธ๋ถ€ ์ž…๋ ฅ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋„๋ก UI๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผํ•œ๋‹ค. 

     

    UI ๋ ˆ์ด์–ด๋Š” ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

    1๏ธโƒฃ ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” UI ์š”์†Œ 

        --> ์ด ์š”์†Œ๋Š” ๋ทฐ ๋˜๋Š” ์ปดํฌ์ฆˆ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    2๏ธโƒฃ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์ด๋ฅผ UI์— ๋…ธ์ถœํ•˜๋ฉฐ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒํƒœ ํ™€๋”

        --> ๋ทฐ ๋ชจ๋ธ ํด๋ž˜์Šค๊ฐ€ ์ด๋Ÿฌํ•œ ์ƒํƒœ ํ™€๋”์— ํ•ด๋‹นํ•œ๋‹ค.

    ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด

    ์•ฑ์˜ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด์—๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์•ฑ์˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, ์ €์žฅ, ๋ณ€๊ฒฝ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ทœ์น™์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 

     

    ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋Š” 0๊ฐœ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๊ฐ๊ฐ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ, Repository๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์•ฑ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ณ„๋กœ ์ €์žฅ์†Œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์ธ ๊ด€๋ จ ๋ฐ์ดํ„ฐ์—๋Š” AuthRepository ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์˜ํ™” ๊ด€๋ จ ๋ฐ์ดํ„ฐ์—๋Š” MoviesRepository๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 

     

    ๊ทธ๋Ÿฌ๋ฉด ๋กœ๊ทธ์ธ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋Š” ๋กœ๊ทธ์ธ ์ €์žฅ์†Œ ํด๋ž˜์Šค์— ์ •์˜ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ์•˜๋Š”๋ฐ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ž‘์—…์ด ํฌํ•จ๋˜์–ด์•ผํ• ์ง€๋Š” ์•„์ง ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด์ œ ์ €์žฅ์†Œ ํด๋ž˜์Šค์—์„œ ๋‹ด๋‹นํ•˜๋Š” ์ž‘์—…์„ ์•Œ์•„๋ณด์ž. 

     

    ๐Ÿซ™ ์ €์žฅ์†Œ ํด๋ž˜์Šค์—์„œ ๋‹ด๋‹นํ•˜๋Š” ์ž‘์—…

     

    1๏ธโƒฃ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋ฐ์ดํ„ฐ ๋…ธ์ถœ

    2๏ธโƒฃ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ ๊ณณ์— ์ง‘์ค‘

    3๏ธโƒฃ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ฐ„์˜ ์ถฉ๋Œ ํ•ด๊ฒฐ

    4๏ธโƒฃ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ถ”์ƒ‡์™€

    5๏ธโƒฃ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํฌํ•จ

     

    ๊ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค ํด๋ž˜์Šค๋Š” ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ ์†Œ์Šค, ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ์†Œ์Šค ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•ด์ค€๋‹ค. 

     

    โš ๏ธ์ฃผ์˜์‚ฌํ•ญ 

    1๏ธโƒฃ๊ณ„์ธต ๊ตฌ์กฐ์˜ ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด์˜ ์ง„์ž…์ ์€ ํ•ญ์ƒ Repository ํด๋ž˜์Šค์—ฌ์•ผํ•œ๋‹ค. ๋ทฐ ๋ชจ๋ธ์ด๋‚˜ ์‚ฌ์šฉ ์‚ฌ๋ก€ ํด๋ž˜์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์ข…์† ํ•ญ๋ชฉ์œผ๋กœ ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

    2๏ธโƒฃ์ด ๋ ˆ์ด์–ด์—์„œ ๋…ธ์ถœ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ฐ’์„ ์ผ๊ด€๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋งŒ๋“ค ์œ„ํ—˜์— ๋น ์ง€์ง€ ์•Š๋Š”๋‹ค!

    ๋˜ํ•œ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

     

    ๐Ÿ“žAPI ๋…ธ์ถœ

     

    ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด

    ์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ดํ•ดํ•ด๋ณผ ์ฐจ๋ก€์ด๋‹ค. 

    ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋Š” UI ๋ ˆ์ด์•„์™€ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ์‚ฌ์ด์— ์žˆ๋Š” ์„ ํƒ์  ๋ ˆ์ด์–ด์ด๋‹ค. ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ์—ฌ๋Ÿฌ ๋ทฐ ๋ชจ๋ธ์—์„œ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์บก์Šํ™”๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. 

     

    ์ด ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์˜ ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์‚ฌ๋ก€๋˜๋Š” ์ƒํ˜ธ์ž‘์šฉ์ž๋ผ๊ณ  ํ•œ๋‹ค. Use Case ๊ฐœ๋…์ด ์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๋•Œ ๊ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ด์•ผํ•œ๋‹ค. 

     

    ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ ๋ทฐ ๋ชจ๋ธ์—์„œ ์‹œ๊ฐ„๋Œ€๋ฅผ ์‚ฌ์š”ํ•˜์—ฌ ํ™”๋ฉด์— ์ ์ ˆํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒฝ์šฐ ์•ฑ์—๋Š” GetTimeZoneUseCase ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์นด์นด์˜ค, ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ์š”์ฒญ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ์ด ๋•Œ์—๋Š” MakeLoginRequestUseCase ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    728x90