Skip to content

Latest commit

ย 

History

History
62 lines (47 loc) ยท 2.24 KB

ClassStruct.md

File metadata and controls

62 lines (47 loc) ยท 2.24 KB

Class ์™€ Struct์˜ ์ฐจ์ด

Answer

// Struct
struct Resolution {
    var width = 0
    var height = 0
}
// Class
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}
// Instance
let someResolution = Resolution()
let someVideoMode = VideoMode()

struct

  • call by value (ํ• ๋‹น ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ์‹œ value copy๊ฐ€ ์ผ์–ด๋‚จ)
  • stack memory ์˜์—ญ์— ํ• ๋‹น (์†๋„๊ฐ€ ๋น ๋ฆ„)
  • scope based lifetime: ์ปดํŒŒ์ผํƒ€์ž„์— compiler๊ฐ€ ์–ธ์ œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น/ํ•ด์ œํ• ์ง€ ์ •ํ™•ํžˆ ์•Œ๊ณ ์žˆ์Œ
  • data locality: CPU ์บ์‹œ ํžˆํŠธ์œจ์ด ๋†’์Œ
  • ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ (protocol์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  • NSData๋กœ serialize ๋ถˆ๊ฐ€๋Šฅ
  • Codable ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ์†์‰ฌ์šด JSON <-> struct ๋ณ€ํ™˜ ๊ฐ€๋Šฅ (Swift 4 ์ด์ƒ)
  • ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋กœ copy๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ๋•Œ๋ฌธ์— multi-thread ํ™˜๊ฒฝ์—์„œ ๊ณต์œ ๋ณ€์ˆ˜๋กœ ์ธํ•ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ํ™•๋ฅ ์ด ์ ์Œ

class

  • call by reference (ํ• ๋‹น ๋˜๋Š” ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ „๋‹ฌ์‹œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’๋งŒ ๋ณต์‚ฌ๋จ)
  • heap memory ์˜์—ญ์— ํ• ๋‹น (์†๋„๊ฐ€ ๋Š๋ฆผ)
  • ๋Ÿฐํƒ€์ž„์— ์ง์ ‘ allocํ•˜๋ฉฐ reference counting์„ ํ†ตํ•ด dealloc์ด ํ•„์š”
  • memory fragmentation ๋“ฑ์˜ overhead๊ฐ€ ์กด์žฌ
  • ์ƒ์† ๊ฐ€๋Šฅ
  • NSData serialize ๊ฐ€๋Šฅ
  • Codable ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
  • ๋Ÿฐํƒ€์ž„์— ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ†ตํ•ด์„œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋™์ž‘์ด ๊ฐ€๋Šฅ
  • deinitializer ์กด์žฌ

์ฐธ๊ณ : class์•ˆ์— struct ๋ณ€์ˆ˜๋ฅผ property๋กœ ์ •์˜ํ•˜๋Š”๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ struct์˜ property์ค‘ ํ•˜๋‚˜๋กœ class ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด ๊ฒฝ์šฐ ํ•ด๋‹น struct ๋ณ€์ˆ˜์˜ copy๊ฐ€ ์ผ์–ด๋‚ ๋•Œ class ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๊ฐ’๋งŒ ๋ณต์‚ฌ๋œ๋‹ค.

ํ•ต์‹ฌ

call by value VS call by reference

๊ตฌ์กฐ์ฒด(struct)์™€ ์—ด๊ฑฐํ˜•(enum)์€ call by value๋กœ์„œ, ํ• ๋‹น ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ ์‹œ value copy๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

ํ•˜์ง€๋งŒ Class๋Š” call by reference๋กœ์„œ, ํ• ๋‹น ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ ์‹œ value copy ๋Œ€์‹ ์— ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’๋งŒ ๋ณต์‚ฌ๋˜์–ด ์ฐธ์กฐ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐ์—ด, ๋”•์…”๋„ˆ๋ฆฌ, ์…‹๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์€ ๊ตฌ์กฐ์ฒด๋กœ์„œ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.