iOS

MVVM ์•„ํ‚คํ…์ฒ˜

MVVM pattern, ViewModel, data binding, separation of concerns, ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ

20 ๋ฉด์ ‘ ์งˆ๋ฌธยท
Mid-Level
1

MVVM ์•„ํ‚คํ…์ฒ˜์—์„œ ViewModel์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋‹ต๋ณ€

ViewModel์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์บก์Аํ™”ํ•˜๊ณ  UIKit์ด๋‚˜ SwiftUI์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ทฐ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Model๊ณผ View ๊ณ„์ธต์„ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ๋ช…ํ™•ํ•œ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

2

MVVM์—์„œ Model์˜ ์ฃผ์š” ์ฑ…์ž„์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋‹ต๋ณ€

Model์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์ ์šฉํ•˜๋ฉฐ View ๋ฐ ViewModel ๊ณ„์ธต๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. UI ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋ถ€ํ„ฐ์˜ Model ๋…๋ฆฝ์„ฑ์€ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ์˜ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

3

MVVM ์•„ํ‚คํ…์ฒ˜์—์„œ View์˜ ์ฃผ์š” ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋‹ต๋ณ€

View๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์บก์ฒ˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ฝ”๋“œ๋งŒ ํฌํ•จํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. View๋Š” data binding์„ ํ†ตํ•ด ViewModel์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ๋‹จ์ˆœํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. SwiftUI์—์„œ๋Š” @ObservedObject๋‚˜ @StateObject๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ViewModel์„ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค. UIKit์—์„œ๋Š” Combine์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.

4

MVVM ๋งฅ๋ฝ์—์„œ data binding์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

5

SwiftUI์—์„œ @Published์™€ @ObservedObject์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

+17 ๋ฉด์ ‘ ์งˆ๋ฌธ

๊ธฐํƒ€ iOS ๋ฉด์ ‘ ์ฃผ์ œ

Swift ๊ธฐ์ดˆ

Junior
25๊ฐœ ์งˆ๋ฌธ

Swift ์–ธ์–ด ๊ธฐ์ดˆ

Junior
15๊ฐœ ์งˆ๋ฌธ

UIKit ๊ธฐ์ดˆ

Junior
18๊ฐœ ์งˆ๋ฌธ

UIViewController ์ƒ๋ช…์ฃผ๊ธฐ

Junior
20๊ฐœ ์งˆ๋ฌธ

UserDefaults & Keychain

Junior
20๊ฐœ ์งˆ๋ฌธ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ๋ช… ์ฃผ๊ธฐ

Junior
20๊ฐœ ์งˆ๋ฌธ

Auto Layout & Constraints

Mid-Level
24๊ฐœ ์งˆ๋ฌธ

UITableView & UICollectionView

Mid-Level
25๊ฐœ ์งˆ๋ฌธ

SwiftUI ๊ธฐ์ดˆ

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

SwiftUI ์ƒํƒœ ๊ด€๋ฆฌ

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

SwiftUI ๋‚ด๋น„๊ฒŒ์ด์…˜

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

Networking & URLSession

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

Codable ๋ฐ JSON ํŒŒ์‹ฑ

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

Core Data

Mid-Level
22๊ฐœ ์งˆ๋ฌธ

ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

ํ‘ธ์‹œ ์•Œ๋ฆผ

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ XCTest

Mid-Level
20๊ฐœ ์งˆ๋ฌธ

UI ํ…Œ์ŠคํŠธ

Mid-Level
18๊ฐœ ์งˆ๋ฌธ

Xcode ๋ฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ

Mid-Level
16๊ฐœ ์งˆ๋ฌธ

Swift Package Manager

Mid-Level
16๊ฐœ ์งˆ๋ฌธ

Memory Management & ARC

Senior
22๊ฐœ ์งˆ๋ฌธ

Combine Framework

Senior
24๊ฐœ ์งˆ๋ฌธ

Concurrency & async/await

Senior
26๊ฐœ ์งˆ๋ฌธ

iOS Design Patterns

Senior
24๊ฐœ ์งˆ๋ฌธ

์„ฑ๋Šฅ ์ตœ์ ํ™”

Senior
22๊ฐœ ์งˆ๋ฌธ

๋ณด์•ˆ ๋ฐ ์•”ํ˜ธํ™”

Senior
20๊ฐœ ์งˆ๋ฌธ

SwiftUI Advanced

Senior
22๊ฐœ ์งˆ๋ฌธ

iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜

Senior
22๊ฐœ ์งˆ๋ฌธ

๋‹ค์Œ ๋ฉด์ ‘์„ ์œ„ํ•ด iOS์„ ๋งˆ์Šคํ„ฐํ•˜์„ธ์š”

๋ชจ๋“  ์งˆ๋ฌธ, flashcards, ๊ธฐ์ˆ  ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์—ฐ์Šต, ๋ฉด์ ‘ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์„ธ์š”.

๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ