๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS/Architecture

[Architecture] Clean Architecture

์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค :)

์œ ์—ฐํ•œ ์„ค๊ณ„์— ๊ด€์‹ฌ์ด ๋งŽ์•„์ง€๋ฉด์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ซŒ์ซŒ๋”ฐ๋ฆฌ๋กœ ๊ณต๋ถ€๋Š” ํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๋จธ๋ฆฟ์†์— ํ™•์‹คํ•˜๊ฒŒ ๊ฐœ๋…์ด ์žกํ˜€์žˆ์ง„ ์•Š์€ ์ƒํƒœ์˜€๋Š”๋ฐ.. ์ด์ œ๋Š” ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๊นŒ์ง€ ํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” Robert C. Martin์˜ The Clean Architecture ๋ผ๋Š” ๊ธ€์„ ๋ฒˆ์—ญํ•ด๋ณด๋ฉด์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ๋…์— ๋Œ€ํ•œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Clean Architecture๋ž€?

ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” Robert C. Martin(aka ์—‰ํด๋ฐฅ, ๋ฐฅ์•„์ €์”จ)์— ์˜ํ•ด ๊ณ ์•ˆ๋œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

๋ฐฅ์•„์ €์”จ๊ฐ€ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋Œ€์ฒด ์™œ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋ƒ.. ํ•˜๋ฉด! ๊ธฐ์กด์˜ ์—ฌ๋Ÿฌ ์•„ํ‚คํ…์ฒ˜์—์„œ ์œ ์‚ฌ์„ฑ์„ ์ฐพ์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ์•„ํ‚คํ…์ฒ˜๋“ค์€ ์„ธ๋ถ€์ ์ธ ์‚ฌํ•ญ์€ ๋‹ค๋ฅด์ง€๋งŒ ๋ชจ๋‘ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(separation of concerns)๋ผ๋Š” ๋™์ผํ•œ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋“ค์€ ๋‹ค์Œ์˜ ํŠน์ง•์„ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

1. Independent of Frameworks. ํ”„๋ ˆ์ž„์›Œํฌ์— ๋…๋ฆฝ์ 

์•„ํ‚คํ…์ฒ˜๋Š” ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์กด์žฌ ์—ฌ๋ถ€์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. Testable. ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

๋น„์Šค๋‹ˆ์Šค ๋กœ์ง์€ UI, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์›น ์„œ๋ฒ„ ๋˜๋Š” ๊ธฐํƒ€ ์™ธ๋ถ€ ์š”์†Œ ์—†์ด ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. Independent of UI. ๋…๋ฆฝ์ ์ธ UI

์‹œ์Šคํ…œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ UI๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ex. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ์›น UI๋ฅผ ์ฝ˜์†” UI๋กœ ๊ต์ฒด ๊ฐ€๋Šฅ

 

4. Independent of Database. ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

5. Independent of any external agency. - ์™ธ๋ถ€ ์„ธ๊ณ„๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ 

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์™ธ๋ถ€ ์„ธ๊ณ„์— ๋Œ€ํ•ด ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋“ค์„ ๋‹จ์ผ ๊ฐœ๋…์œผ๋กœ ํ†ตํ•ฉํ•˜๊ณ ์ž ๊ณ ์•ˆ๋œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ฐ”๋กœ Clean Architecture์ž…๋‹ˆ๋‹ค.

The Dependency Rule

๋งˆํ‹ด์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด 4๊ฐœ์˜ ๋ ˆ์ด์–ด๋กœ ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค.

์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฐ€์žฅ ์šฐ์„ ์ ์ธ ๊ทœ์น™์€ ์ข…์†์„ฑ ๊ทœ์น™(Dependency Rule)์ž…๋‹ˆ๋‹ค.

์ข…์†์„ฑ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ์†Œ์Šค์ฝ”๋“œ ์ข…์†์„ฑ์€ ์•ˆ์ชฝ์œผ๋กœ๋งŒ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. (๊ทธ๋ฆผ์—์„œ๋„ ํ™”์‚ดํ‘œ๊ฐ€ ์•ˆ์ชฝ์œผ๋กœ๋งŒ ํ–ฅํ•จ)
2. ๋‚ด๋ถ€์˜ ์–ด๋–ค ๊ฒƒ๋„ ์™ธ๋ถ€์˜ ์› ์•ˆ์— ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†๋‹ค.
3. ์™ธ๋ถ€์˜ ์› ์•ˆ์— ์žˆ๋Š” ์–ด๋–ค ๊ฒƒ๋„ ๋‚ด๋ถ€์˜ ์› ์•ˆ์˜ ์ฝ”๋“œ์—์„œ ์–ธ๊ธ‰๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. (ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ณ€์ˆ˜ ๋“ฑ)

 

์ข…์†์„ฑ ๊ทœ์น™์˜ ํ•ต์‹ฌ์€ ์•ˆ์ชฝ ์›์€ ๋ฐ”๊นฅ์ชฝ ์›์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ! ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ๋‚ด๋ถ€ ๋ ˆ์ด์–ด๋Š” ์™ธ๋ถ€ ๋ ˆ์ด์–ด์— ์˜์กด์„ฑ(dependency)๋ฅผ ๊ฐ€์ง€๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

 

๊ฐ ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์•ˆ์ชฝ ์›๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ด…์‹œ๋‹ค.

Entities

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

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ์ฒด๋“ค(business objects)๋กœ, ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๊ณ  ๋†’์€ ์ˆ˜์ค€์˜ ๊ทœ์น™๋“ค์„ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ณ„์ธต์€ ๊ฐ€์žฅ ๋œ ๋ณ€๊ฒฝ๋˜๋ฉฐ, ์™ธ๋ถ€์˜ ๋ณ€๊ฒฝ์—๋„ ์˜ํ–ฅ ๋ฐ›์ง€ ์•Š๋Š” ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.

 

๋ฒˆ์—ญ์„ ํ•˜๋‹ˆ ์„ค๋ช…์ด ์–ด๋ ต๊ฒŒ ๋˜์–ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ํ•œ๋งˆ๋””๋กœ ์—”ํ‹ฐํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

๋ทฐ๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ(๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ)๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ์š”,

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

Use Cases

ํ•ด๋‹น ๊ณ„์ธต์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ์™€์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์กฐ์ •ํ•˜๊ณ , ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๊ฐ€ Use Case์˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Use Case์˜ ๋ณ€ํ™”๋Š” ์•ˆ์ชฝ ์›์ธ Enitity์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฉฐ, Use Case ๋˜ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI ํ˜น์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ์™ธ๋ถ€์˜ ๋ณ€ํ™”์— ์˜ํ–ฅ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์ข…์†์„ฑ ๊ทœ์น™) 

ํ•˜์ง€๋งŒ, ์•ฑ ์ „์ฒด์˜ ๋™์ž‘์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์€ Use Case์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์™ธ๋ถ€ ๋ ˆ์ด์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ์‹œ๋‚˜๋ฆฌ์˜ค ๋ณ€๊ฒฝ์ด๋‹ˆ๊นŒ..์ด๋Ÿฐ ๋œป์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...)

 

Use Case๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ์œผ๋กœ, ์—”ํ‹ฐํ‹ฐ๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์กฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค MVVM ๊ตฌ์กฐ์—์„œ Use Case๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ๊ณ ๋ฏผ๋˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ์š”,, ๋‹จ์ˆœํžˆ ๋ทฐ์™€ ๋ทฐ๋ชจ๋ธ์˜ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ธ์ง€...์ด ๋ถ€๋ถ„์€ ์ ์šฉํ•ด๋ณด๋ฉด์„œ ๋” ๊ณ ๋ฏผํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค! (MVVM+Clean Architecture ๊ด€๋ จ ๊ฒŒ์‹œ๊ธ€๋กœ ๋‚ด์šฉ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”)

Interface Adapters

Controllers, Gateways, Presenters๋ฅผ ํฌํ•จํ•˜๋Š” ๋ ˆ์ด์–ด๋กœ, Presentation Layer ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ Use Case ๋ฐ Enitity์— ๊ฐ€์žฅ ํŽธ๋ฆฌํ•œ ํฌ๋งท์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์›น๊ณผ ๊ฐ™์€ ์™ธ๋ถ€์—์„œ ํŽธ๋ฆฌํ•œ ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ์•ˆ์ชฝ ์›์˜ ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ๋ชฐ๋ผ์•ผ ํ•˜๋Š”๋ฐ, ํ•ด๋‹น ๋ ˆ์ด์–ด์—์„œ ์•Œ๋งž์€ ํ˜•์‹์œผ๋กœ ๋งคํ•‘ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Frameworks and Drivers

๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ ๋ ˆ์ด์–ด๋กœ, DB, UI, ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ๊ณผ ๊ฐ™์€ ๋„๊ตฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Only Four Circles?

์—ฌ๊ธฐ๊นŒ์ง€ 4๊ฐœ์˜ ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ, ๊ณ„์ธต์€ ๊ผญ 4๊ฐœ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋‚˜์š”?

์ •๋‹ต์€ ๋‹น์—ฐํžˆ ์•„๋‹™๋‹ˆ๋‹ค! ๋ ˆ์ด์–ด๊ฐ€ ๋ช‡๊ฐœ๋กœ ๊ตฌ์„ฑ๋˜๋“  dependency rule ๋งŒ ์ ์šฉ๋˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์†Œ์Šค ์ฝ”๋“œ ์˜์กด์„ฑ์ด ์•ˆ์ชฝ์œผ๋กœ๋งŒ ํ–ฅํ•˜๋ฉด ๋œ๋‹ค๋Š” ๋œป์ด๊ฒ ์ฃ ??

๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ์€ ์•ˆ์ชฝ์œผ๋กœ ๊ฐˆ ์ˆ˜๋ก ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ถ”์ƒ์ ์ด๊ณ  ์ผ๋ฐ˜์ ์ธ ๊ณ ์ˆ˜์ค€์˜ ์ •์ฑ…์ด ์œ„์น˜ํ•˜๊ณ , ๋ฐ”๊นฅ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ €์ˆ˜์ค€์˜ ๊ตฌ์ฒด์ ์ธ ์„ธ๋ถ€์‚ฌํ•ญ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

Crossing boundaries

์›์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์‹œ๊ฐ€ ๋‹ค์ด์–ด๊ทธ๋žจ ์šฐ์ธก ํ•˜๋‹จ์— ํฌํ•จ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์„ ์„ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด Controller -> Use Case -> Presenter ์˜ ํ”Œ๋กœ์šฐ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”๋ฐ์š”,

Use Case๊ฐ€ ๋” ์•ˆ์ชฝ ์›์ธ๋ฐ Use Case์—์„œ Presenter๋กœ ์‹คํ–‰๋˜๋Š” ํ”Œ๋กœ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

Dependency Rule์— ์œ„๋ฐฐ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€,, ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ!

 

DIP(์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ๋ฒ•์น™)์œผ๋กœ ์•ˆ์ชฝ์—์„œ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๊ฐ„์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

Use Case๊ฐ€ ์•ˆ์ชฝ ์›์— ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค(= Use Case Output Port)๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๊ณ  ๋ฐ”๊นฅ์ชฝ ์›์—์žˆ๋Š” Presenter์—๊ฒŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด ์›ํ•˜๋Š” ํ”Œ๋กœ์šฐ๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ”๊นฅ์ชฝ ๋ ˆ์ด์–ด์ธ Presenter์— ๋Œ€ํ•ด ๋ชฐ๋ผ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (iOS์—์„œ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ)

Clean Architecture์˜ ์žฅ์ 

์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์—ฌ๋Ÿฌ ์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์ข…์†์„ฑ ๊ทœ์น™(dependency rule)์„ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ, ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋กœ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ํŽธ๋ฆฌํ•˜๊ณ  ํ™•์žฅ๊ณผ ์ˆ˜์ •์— ์œ ์—ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์œผ๋กœ ์œ ์—ฐํ•œ ์„ค๊ณ„๊ฐ€ ๋  ๊ฒƒ ๊ฐ™๋„ค์š”!


๋ฐฅ์•„์ €์”จ์˜ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฐœ๋…๊ณผ ๊ฐ ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ์š”,

๋‹ค์Œ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” ์˜ˆ์ œ ์ฝ”๋“œ ๋ถ„์„์„ ํ†ตํ•ด์„œ ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ์ดํ•ดํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

'๐ŸŽ iOS > Architecture' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS/Architecture] UseCase ํ™œ์šฉ๊ธฐ  (0) 2024.08.28
[Architecture] VIPER ํŒจํ„ด  (1) 2022.04.15
[Architecture] MVC, MVP, MVVM ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด  (2) 2022.03.25