๋””์ž์ธํŒจํ„ด

[๋””์ž์ธ ํŒจํ„ด] Repository Pattern

Rainbow๐ŸŒˆCoder 2022. 12. 6. 18:17
728x90

https://youtu.be/x6C20zhZHw8

๋ฆฌํŒฉํ† ๋ง 2ํŒ์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ Repository ํŒจํ„ด์ด ๋‚˜์™€์„œ ๋”ฐ๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

Repository ํŒจํ„ด์ด๋ž€

๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋…ผ๋ฆฌ๋ฅผ ์บก์Аํ™”ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘” ํด๋ž˜์Šค ๋ชจ์Œ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด, ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜(๋กœ์ปฌ DB, ์„œ๋ฒ„ API ์‘๋‹ต ๋“ฑ)์™€ ๊ด€๊ณ„ ์—†์ด ๋™์ผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋„์ž… ๋ฐฐ๊ฒฝ

๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Domain์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ViewModel์€ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜๋ฅผ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๊ณ  ์—ฌ๋Ÿฌ Repository๋ฅผ ๊ณต์œ ํ•˜๋”๋ผ๋„ ์ผ๊ด€๋œ Interface๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” ์š”์†Œ์ด๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ž˜ ์งœ์•ผ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์›น์„œ๋น„์Šค ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ, ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ, ์˜คํƒ€, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ…Œ์ŠคํŠธ์˜ ์–ด๋ ค์›€ ๋“ฑ์ด ์žˆ๋‹ค.

์ด์— ๋”ฐ๋ผ ๋ช‡ ๊ฐ€์ง€ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ,

(1) ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๊ณ 

(2) ์ค‘์•™ ์ง‘์ค‘ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

Repository ํŒจํ„ด ๋„์ž… ์ „

์œ„ ์บก์ฒ˜์—์„œ ๊ณ„์ • ์„ค์ • ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ œํ’ˆ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ

์ž์ฒด์ ์ธ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. (์ฝ”๋“œ ์ค‘๋ณต) 

 

Repository ํŒจํ„ด ๋„์ž… ํ›„

๋‘ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด์ œ ๊ณต์œ  ์ €์žฅ์†Œ์—์„œ ๊ณตํ†ต ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ

๊ฐœ์„ ํ•œ ์ฝ”๋“œ๋Š”, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ฝ”๋“œ๊ฐ€ ์ค‘์•™ ์ง‘์ค‘ํ™”๋˜๊ณ  ์ฝ”๋“œ ์ค‘๋ณต์ด ์‚ฌ๋ผ์กŒ๋‹ค.

๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ฑ…์ž„๋„ ์ด์ „ํ–ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด๊ฐ€ ์ด์ œ ์ธํ”„๋ผ ๊ณ„์ธต์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฐ•ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋•Œํ•œ ์ฑ…์ž„๋„ ์ด์ „ํ–ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์˜ˆ์ƒ ๋™์ž‘๋งŒ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • orm apis์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค์—์„œ ์„ค๊ณ„ ์„ ํƒ์„ ๊ณ ๋ คํ•  ๋•Œ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

์ด ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์€ ์ฝ”๋“œ๊ฐ€ ๋” ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋ ์ˆ˜๋ก ๋ณ€๊ฒฝ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฌ์›Œ์ง€๊ณ  ์ „๋ฐ•์ ์œผ๋กœ ๋” ํฐ ์œ ์—ฐ์„ฑ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋”์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•˜์œ„ ์ˆ˜์ค€ ์ธํ”„๋ผ์— ์–ฝ๋งค์ด์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

 

 

 

Repository ํŒจํ„ด  : ์š”์•ฝ ๋ฐ ์ •๋ฆฌ

 

ํŠน์„ฑ 

(1) ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ(Local Data Source, Remote Data Source)๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ค‘์•™ ์ง‘์ค‘ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

(2) ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Domain์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ViewModel์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ์ปฌ DB์—์„œ ์˜ค๋Š”์ง€, ์„œ๋ฒ„์—์„œ API ์‘๋‹ต์„ ํ†ตํ•ด ์˜ค๋Š” ๊ฒƒ์ธ์ง€ ์ถœ์ฒ˜๋ฅผ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. Repository๋ฅผ ์ฐธ์กฐํ•˜์—ฌ Repository๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

(3) Repository๊ฐ€ ์ถ”์ƒํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•ญ์ƒ ๊ฐ™์€ Interface๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.
ViewModel์ด ์—ฌ๋Ÿฌ Repository๋ฅผ ๊ณต์œ ํ•˜๋”๋ผ๋„ ์ผ๊ด€๋œ Interface๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ๋˜ํ•œ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 
(1) ๋ฐ์ดํ„ฐ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

(2) Domain์—์„œ๋Š” ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

(3) ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋” ์ ํ•ฉํ•˜๋‹ค.

(4) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

(5) ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๊ฐ์†Œํ•œ๋‹ค.

(6) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด์ ์ธ ๋””์ž์ธ์ด ๋ฐ”๋€Œ๋”๋ผ๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ์•„ํ‚คํ…์ณ์ด๋‹ค.

 

 

 

๊ธฐํƒ€ ์ฐธ๊ณ  : https://velog.io/@shinsw627/Repository-Pattern-%EA%B5%AC%ED%98%84

 

https://4z7l.github.io/2020/11/24/repository-pattern.html

 

 

 

 

 

 

728x90