iOS

[ iOS ] MVC - 2 ) Model ๊ฐ์ฒด

Forest Yun 2023. 11. 18. 17:50
728x90

 

Model Object๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

Model object

Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. Model object A model object is a type of object that contains the data of an application, pro

developer.apple.com

 

 

 

Model object

๋ชจ๋ธ ๊ฐ์ฒด๋Š” MVC ๋””์ž์ธ ํŒจํ„ด ์ค‘ Model์— ํ•ด๋‹นํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋ชจ๋ธ ๊ฐ์ฒด์˜ ์ฃผ์š” ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

 

  • ๋ฐ์ดํ„ฐ ํฌํ•จ
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋กœ์ง

 

๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ผ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์†ํ•œ ์˜๊ตฌ ์ƒํƒœ์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋กœ๋“œ๋  ๋•Œ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋ธ ๊ฐ์ฒด์— ์†ํ•ด์•ผ ํ•œ๋‹ค.

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

MVC์—์„œ View์™€ Model์€ ๊ฐ๊ฐ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐ์ฒด ๊ฐ„์˜ ๋ช…์‹œ์ ์ธ ์—ฐ๊ฒฐ์ด ์—†๋Š”๊ฒŒ ๊ฐ€์žฅ ์ด์ƒ์ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์€ ๋‹ค๋ฅธ ๋ง๋กœ, ๋ชจ๋ธ ๊ฐ์ฒด๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ presentation ์ด์Šˆ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋จ์„ ์˜๋ฏธํ•œ๋‹ค

 

 

 

 

 

A Well-Designed Model Class  ์ž˜ ์„ค๊ณ„๋œ ๋ชจ๋ธ ํด๋ž˜์Šค

๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋ธ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ์—” ๋‹ค์Œ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค

  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜: ์บก์Šํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ ‘๊ทผ ๋ฉ”์„œ๋“œ์™€ ์„ ์–ธ ํ”„๋กœํผํ‹ฐ: ์ ‘๊ทผ ๋ฉ”์„œ๋“œ์™€ ์„ ์–ธ ํ”„๋กœํผํ‹ฐ๋Š” ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ค‘์žฌํ•˜์—ฌ ์บก์Šํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ์ ‘๊ทผ ๋ฉ”์„œ๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๊ณ (get) ์„ค์ •ํ•œ๋‹ค(set). ์„ ์–ธ ํ”„๋กœํผํ‹ฐ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฉ”์„œ๋“œ๋ฅผ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ์–ธ์–ด ์ˆ˜์ค€์˜ ํŽธ์˜ ๊ทœ์น™์ด๋‹ค. ์ ‘๊ทผ ๋ฉ”์„œ๋“œ์™€ ์„ ์–ธ ํ”„๋กœํผํ‹ฐ์˜ ์ค‘์š”ํ•œ ์—ญํ• ์€ ๊ฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ get๊ณผ set ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์— ๊ถŒ์žฅ๋˜๋Š” ํ˜•์‹์ด ์กด์žฌํ•œ๋‹ค.
  • Key-Value ์ฝ”๋”ฉ: Key- Value ์ฝ”๋”ฉ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์„ key๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฉ”์นด๋‹ˆ์ฆ˜์œผ๋กœ, CoreData๋‚˜ ๊ทธ๋ฐ–์˜ Cocoa์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ ‘๊ทผ ๋ฉ”์„œ๋“œ์™€ ์„ ์–ธ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ช…๋ช…ํ•˜๋Š” ๊ฑด ์ด ๋ฉ”์นด๋‹ˆ์ฆ˜์— ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค.
  • ์ดˆ๊ธฐํ™”์™€ ํ• ๋‹นํ•ด์ œ: ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—์„œ, ๋ชจ๋ธ ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ ๋‹นํ•œ initial ๊ฐ’์„ ์„ค์ •ํ•  initializer ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด initializer ๋ฉ”์„œ๋“œ๋Š” ์ œ๊ณต๋˜๋Š” ํ˜•ํƒœ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋˜ํ•œ Initializer ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹น ํ•ด์ œํ•˜๋Š” dealloc ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณด์œ ํ•˜๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹น ํ•ด์ œํ•  ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ๊ฐ์ฒด ์ธ์ฝ”๋”ฉ: ๋งŒ์•ฝ ๋ชจ๋ธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ์–ด๋”˜๊ฐ€์— ๋ณด๊ด€๋˜์–ด์ง„๋‹ค๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ธ์ฝ”๋”ฉ / ๋””์ฝ”๋”ฉ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ผ.
  • ๊ฐ์ฒด ๋ณต์‚ฌ: ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋ธ ๊ฐ์ฒด๋“ค์„ ๋ณต์‚ฌํ•  ์˜ˆ์ •์ด๋ผ๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ๋ณต์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

โž•

์บก์Šํ™”

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

 

์ด๋Ÿฌํ•œ ์บก์Šํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค:

  • ์ ‘๊ทผ ์ œ์–ด์ž ํ™œ์šฉ: ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์†์„ฑ ๋ฐ ๊ธฐ๋Šฅ์— ๋‹จ๊ณ„์ ์ธ ์ œํ•œ์„ ์„ค์ •ํ•ด ์™ธ๋ถ€์—์„œ ํ•จ๋ถ€๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ์ œํ•œํ•œ๋‹ค. ์˜ˆ) public, private
  • get / set ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ: ์™ธ๋ถ€์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์ „์— ์„ค์ •ํ•˜์—ฌ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค

์บก์Šํ™”๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ๋Š ๊ฐ์ฒด์˜ ์ž์œจ์„ฑ, ์ฆ‰ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋…์ ์ ์ธ ์ฑ…์ž„์„ ๋‹ด๋‹นํ•˜๋„๋ก ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 4๊ฐ€์ง€ ํŠน์ง•ใ…ฃ์ถ”์ƒํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ, ์บก์Šํ™” -

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ฐ์ฒด์˜ ์œ ๊ธฐ์ ์ธ ํ˜‘๋ ฅ๊ณผ ๊ฒฐํ•ฉ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ๊ทธ ์„ค๊ณ„๋ฅผ ๋ฐ”๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„

www.codestates.com

 

 

 

 

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ์„ ์–ธ ํ”„๋กœํผํ‹ฐ

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” privateํ•˜์—ฌ ํด๋ž˜์Šค์™€ ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด ํ”„๋กœํผํ‹ฐ๋Š” publicํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์— ์ ‘๊ทผํ•  ๋•Œ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ publicํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ”„๋กœํผํ‹ฐ์™€ ์œ ์‚ฌํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ์˜ ํŠน์ง•์€ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”๋ถˆ์–ด ํ”„๋กœํผํ‹ฐ๋Š” get๊ณผ set์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค

๊ทธ๋ฆฌ๊ณ  ํ”„๋กœํผํ‹ฐ๋Š” ์‚ฌ์‹ค์ƒ ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ ๋‹ค์ด๋‚˜๋ฏนํ•œ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, CoreData์™€ Key-Value ์ฝ”๋”ฉ์— ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Property vs Instance Variable

Possible Duplicate: Is there a difference between an "instance variable" and a "property" in objective-c / cocoa / cocoa-touch? What is a case in Objective C where you woul...

stackoverflow.com

 

 

 

728x90