Swift

0. ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜

1.๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์ดํ›„์—๋„ ๊ฐ’์„ ๊ณ„์†ํ•ด์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ƒ์ˆ˜๋Š” ์„ ์–ธ ์ดํ›„์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

  2. Swift์—์„œ ๋ณ€์ˆ˜๋Š” var ์ƒ์ˆ˜๋Š” let์œผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค

  3. var๋Š” ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ, let์€ ์ฐธ์กฐํ•˜๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค

1+. ์ฐธ์กฐํ•˜๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š”๊ฒŒ ์ •ํ™•ํžˆ ์–ด๋–ค ์˜๋ฏธ์ธ๊ฐ€์š”?

class Some {
    var num : Int
    
    init(num: Int) {
        self.num = num
    }
}

let a = Some(num: 10)
let b = Some(num: 20)
var c = Some(num: 30)

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์„ ๋•Œ ์ƒ์ˆ˜๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ํ–‰์œ„๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

class๋Š” ์ฐธ์กฐํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜์—๋Š” ์ฃผ์†Œ๊ฐ’(==ํฌ์ธํ„ฐ)์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์ƒ์ˆ˜๋กœ ์„ ์–ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ์ฃผ์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค

์•„๋ž˜์™€ ๊ฐ™์€ ํ–‰์œ„๋Š” ์ฐธ์กฐ ์ฃผ์†Œ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ํ–‰์œ„๋Š” c๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” a๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค

2: ํƒ€์ž…์ถ”๋ก ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋Š” ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํƒ€์ž…์„ ์ƒ๋žตํ•˜๋Š”๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž… ์ถ”๋ก  ๊ณผ์ •์„ ๊ฑฐ์ณ ํƒ€์ž…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค

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

1. Class / Struct

1. Class ์™€ Struct์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  • struct๋Š” value type์ด๊ณ  class๋Š” reference type์ž…๋‹ˆ๋‹ค

  • ๊ทธ๋ž˜์„œ class๋Š” ARC๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค

  • class๋Š” ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ struct๋Š” ์ƒ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

2. Class์™€ Struct์˜ ๊ณตํ†ต์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ •์˜ํ•˜์—ฌ ์ดˆ๊ธฐํ™”๋  ๋•Œ์˜ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • extension์„ ํ†ตํ•ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

2+. ์–ธ์ œ class๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ธ์ œ struct๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”?

Apple ๊ฐ€์ด๋“œ๋ผ์ธ์—์„œ ๋‹ค์Œ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค

  • ์—ฐ๊ด€๋œ ๊ฐ„๋‹จํ•œ ๊ฐ’์˜ ์ง‘ํ•ฉ์„ ์บก์Аํ™”ํ•˜๋Š” ๋ชฉ์ ์ผ ๋•Œ

  • ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ’ ํƒ€์ž…์ด๊ณ  ์ฐธ์กฐ๋ณด๋‹ค ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋‹นํ•  ๋•Œ

  • ์ƒ์†ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ

์ฆ‰, ์ƒ์† ๊ด€๊ณ„๋ฅผ ํ•„์š”๋กœ ํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๊ณ„์† ๊ฐ€๊ณต๋˜๋Š”๊ฒฝ์šฐ์—๋Š” class๊ฐ€ ๋” ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค

3. Swift์˜ ๋ณต์‚ฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. swift๋Š” COW๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’ํƒ€์ž…์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค

  2. COW๋Š” ์›๋ณธ๊ณผ ๋ณต์‚ฌ๋ณธ ์ค‘ ์ˆ˜์ •๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ณต์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์›๋ณธ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋‹ค๊ฐ€, ๋‘˜ ์ค‘ ํ•˜๋‚˜์—์„œ ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค

  3. ๊ทธ๋ž˜์„œ COW๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์—์„œ ๋ณต์‚ฌ ํ›„ ์ฒซ๋ฒˆ์งธ ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” COW์— ์˜ํ•ด ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค

  4. ๋ชจ๋“  value type์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ collection type์„ ๋ณต์‚ฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3+. ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ COW๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฑธ๊นŒ์š”?

swift์˜ COW๋Š” ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„ ์ค‘์— ๊ณต๊ฐ„์˜ ํšจ์œจ์„ ์„ ํƒํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Copy On Write๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค. Comment

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ณต์‚ฌ ๋™์ž‘์„ ํ•  ๋•Œ, ์‹ค์ œ ์›๋ณธ์ด๋‚˜ ๋ณต์‚ฌ๋ณธ์ด ์ˆ˜์ •๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ณต์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์›๋ณธ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ–ˆ๋‹ค๊ฐ€, ์›๋ณธ์ด๋‚˜ ๋ณต์‚ฌ๋ณธ์—์„œ ์ˆ˜์ •์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ, ๊ทธ๋•Œ ๋ณต์‚ฌ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ณต์‚ฌ๋Š” ํ–ˆ์œผ๋‚˜, ์ˆ˜์ •์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

4. class์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  • final

    • ์ƒ์†๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์— final์„ ๋ถ™์ด๋ฉด ๋ฉ”์†Œ๋“œ๊ฐ€ Static Dispatch๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ ๋ฉ๋‹ˆ๋‹ค

    • ํด๋ž˜์Šค๋Š” ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด Dynamic Dispatch๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

    • ํ•˜์ง€๋งŒ final ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด ํด๋ž˜์Šค์˜ ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฉ”์†Œ๋“œ์˜ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋„ ๋ถˆ๊ฐ€๋Šฅํ•ด์ ธ Static Dispatch๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

    • Dynamic Dispatch๋Š” ๋Ÿฐํƒ€์ž„์‹œ ์‹คํ–‰ํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , Static Dispatch๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

    • ๋˜ํ•œ private ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ํ˜„์žฌ ํŒŒ์ผ๋กœ ์ œํ•œ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋™์ ์œผ๋กœ private ํ‚ค์›Œ๋“œ๊ฐ€ ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ๋Š” ๊ณณ์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€ ํŒ๋‹จ ๊ฐ€๋Šฅํ•˜๋‹ค. Comment

      ์‰ฝ๊ฒŒ ๋งํ•ด privateํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋Š” final ํ‚ค์›Œ๋“œ๊ฐ€ ์—†๋”๋ผ๋„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค๋ฉด, ์ž๋™์ ์œผ๋กœ static dispatch๋กœ ๋™์ž‘ํ•œ๋‹ค.

5. Dispatch๊ฐ€ ๋ญ”๋ฐ์š”?

Dispatch๋Š” ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ, ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. Static, Dynamic ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค

Static Dispatch๋Š” ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. Dynamic Dispatch๋Š” ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ’ํƒ€์ž…์€ Static Dispatch๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฐธ์กฐํƒ€์ž…์—์„œ ์–ด๋–ค Dispatch๋ฅผ ์„ ํƒํ•˜๋Š”์ง€๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐ€๋Šฅ์„ฑ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค

๊ทธ๋ž˜์„œ final ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด Static Dispatch๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๊ฒƒ ์ž…๋‹ˆ๋‹ค

WMO

  • Whole Module Optimization์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • WMO๋Š” ๋ชจ๋“ˆ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๋ฉ์–ด๋ฆฌ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ internal level์— ๋Œ€ํ•ด์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‚ด๋ถ€์ ์œผ๋กœ final์„ ๋ถ™์—ฌ์„œ ์ปดํŒŒ์ผ ํ•ฉ๋‹ˆ๋‹ค

  • ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•œ ์ƒ์†๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•ด Dynamic Dispatch์˜ ์‚ฌ์šฉ์„ ์ค„์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

6. swift์˜ ํƒ€์ž…์บ์ŠคํŒ…์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. swift์˜ ํƒ€์ž…์บ์ŠคํŒ…์€ ํƒ€์ž…์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ์ „ํ™˜ํ•˜์—ฌ ๋‹ค๋ฅธ ํƒ€์ž…์ฒ˜๋Ÿผ ํ–‰์„ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค

  2. ์—…์บ์ŠคํŒ…์€ ํ•˜์œ„ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋‹ค์šด์บ์ŠคํŒ…์€ ์ƒ์œ„ํด๋ž˜์Šค๊ฐ€ ํ•˜์œ„ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

  3. ์—…์บ์ŠคํŒ…์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌด์กฐ๊ฑด ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ as๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  4. ๋‹ค์šด์บ์ŠคํŒ…์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ as? ๋˜๋Š” as! ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋Ÿฐํƒ€์ž„์— ์บ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค

  5. as?๋Š” ์˜ต์…”๋„์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. as!๋Š” ์˜ต์…”๋„์ด ๊ฐ•์ œ ์ถ”์ถœ๋˜๋ฏ€๋กœ ๋‹ค์šด์บ์ŠคํŒ…์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์—๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

6+. ์บ์ŠคํŒ…ํ•˜๋ฉด ํƒ€์ž…์ด ๋ฐ”๋€Œ์ง€ ์•Š๋‚˜์š”?

  1. ์˜ˆ๋ฅผ๋“ค์–ด class Person {}, class Student: Person {}๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

  2. let student = Student() as Persen์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์—…์บ์ŠคํŒ…๋˜์–ด Student์—์„œ ์ƒˆ๋กœ ๋งŒ๋“  ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

  3. ํ•˜์ง€๋งŒ type(of: student)๋Š” ์—ฌ์ „ํžˆ Student์ž…๋‹ˆ๋‹ค. ์ฆ‰, type์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฒ”์œ„๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

2. ์ ‘๊ทผ์ œ์–ด์ž

1. ์ ‘๊ทผ ์ œ์–ด์ž์˜ ์ข…๋ฅ˜์—” ์–ด๋–ค๊ฒŒ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. ์ ‘๊ทผ์ œ์–ด๋Š” ์ ‘๊ทผ์ˆ˜์ค€ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๊ทผ์ˆ˜์ค€ ํ‚ค์›Œ๋“œ๋Š” open, public, internal, fileprivate, private ๋‹ค์„ฏ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํ‚ค์›Œ๋“œ ์ค‘์—์„œ open์€ ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ ‘๊ทผ ์ˆ˜์ค€์—๋Š” ๊ทœ์น™์ด ์žˆ๋Š”๋ฐ ์ƒ์œ„์š”์†Œ๋ณด๋‹ค ํ•˜์œ„์š”์†Œ๊ฐ€ ๋” ๋†’์€ ์ ‘๊ทผ ์ˆ˜์ค€์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

2. open๊ณผ public ํ‚ค์›Œ๋“œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

  1. open๊ณผ public์€ ์™ธ๋ถ€ ๋ชจ๋“ˆ๊นŒ์ง€ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค

  2. open์€ ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค ๋ฉค๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  3. public์€ ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์ƒ์†๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋Š” ์ƒ์†๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

3. fileprivate๊ณผ private ํ‚ค์›Œ๋“œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

fileprivate์€ ๊ทธ ์š”์†Œ๊ฐ€ ๊ตฌํ˜„๋œ ์†Œ์ŠคํŒŒ์ผ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, private์€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•œ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class๋‚˜ struct๋ฅผ private์œผ๋กœ ๋งŒ๋“ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์ •์ƒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์ธกํ•˜๊ฑด๋ฐ ๊ตฌํ˜„์ฒด ์ž์ฒด์— private์„ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ตฌํ˜„์ฒด์˜ ์ƒ์œ„์ธ 'ํŒŒ์ผ'์„ ๊ตฌํ˜„์ฒด๋กœ ์ธ์‹ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋™์ผํ•œ ํŒŒ์ผ ๋‚ด์—์„œ๋Š” A ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, fileprivate ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๊ทผ๊ฑฐ๋กœ ์ƒ์œ„ ์ ‘๊ทผ ์ˆ˜์ค€์ธ fileprivate ํด๋ž˜์Šค๋‚ด์— private ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์ด๋‹ˆ์…œ๋ผ์ด์ €

1 : Convenience init์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  • ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์ดˆ๊ธฐํ™”๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค

  • ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๊ผญ!!! ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค -> self.init()

์ •๋ง ํŽธ์˜์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๊ผญ!!! ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ• ๊นŒ์š”?

ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽธ์˜ init์ด ๋‹ค๋ฅธ ํŽธ์˜ init์„ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค

ํ•˜์ง€๋งŒ ์ตœ์ข…์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๊ผญ! ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๋ก ์ ์œผ๋กœ ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋งˆ์ง€๋ง‰์— ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค

ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ € ๊ผญ ์จ์•ผ ํ•˜๋‚˜์š”?

์•„๋‹ˆ์š”! ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค

์ฐจ์ด์ ์ด ์žˆ๋‹ค๋ฉด ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” self.init์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

์–ด๋–ค ํด๋ž˜์Šค์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์™€ ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๊ฐ€ ์žˆ์„๋•Œ

์•„๋ž˜์˜ ๋‘ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์˜ ๋‘ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๋™์‹œ์— ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

2 : required init์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. required init์€ ์ƒ์†๋ฐ›์€ ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์ด ์žฌ์ •์˜ ํ•ด์•ผํ•˜๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ € ์ž…๋‹ˆ๋‹ค

  2. ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ required init์„ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ฐ•์ œ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ override ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค

  3. ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์•„๋ฌด๋Ÿฐ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๊ฐ€ ์ž๋™์ƒ์† ๋˜๋ฏ€๋กœ required init์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

  4. ๋‹จ, ํ•˜์œ„ํด๋ž˜์Šค์—์„œ ์–ด๋– ํ•œ ์ข…๋ฅ˜์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ผ๋„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž๋™์ƒ์† ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ required init์„ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

3 : class์˜ ์ดˆ๊ธฐํ™” ์ง„ํ–‰ ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

swift์˜ ํด๋ž˜์Šค ์ดˆ๊ธฐํ™”๋Š” 2๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค

  • 1๋‹จ๊ณ„ : ํด๋ž˜์Šค์— ์ •์˜ํ•œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ์ดˆ๊นƒ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค

  • 2๋‹จ๊ณ„ : ๋ชจ๋“  ์ €์žฅ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ํ•  ๊ธฐํšŒ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค

์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ์ „์— ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์•„ ์ดˆ๊ธฐํ™”๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค

์ปดํŒŒ์ผ๋Ÿฌ๋Š” 2๋‹จ๊ณ„ ์ดˆ๊ธฐํ™”๋ฅผ ์˜ค๋ฅ˜ ์—†์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„ค ๊ฐ€์ง€ safety-checks๋ฅผ ํ•ฉ๋‹ˆ๋‹ค

  1. ์ž์‹ํด๋ž˜์Šค์˜ init์ด ๋ถ€๋ชจํด๋ž˜์Šค์˜ init์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ์ดˆ๊ธฐํ™” ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค

  1. ์ž์‹ํด๋ž˜์Šค์˜ init์€ ์ƒ์†๋ฐ›์€ ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจํด๋ž˜์Šค์˜ init์„ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

  1. ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๊ทธ ์–ด๋–ค ํ”„๋กœํผํ‹ฐ๋ผ๋„ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์ „์— ๋‹ค๋ฅธ init์„ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

  1. ์ดˆ๊ธฐํ™” 1๋‹จ๊ณ„๋ฅผ ๋งˆ์น˜๊ธฐ ์ „๊นŒ์ง€ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

4. deinit์€ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ์š”?

  • ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ๋•Œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จํ•˜์—ฌ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • deinit ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๋Š” ์‹œ์ ์— ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค

  • ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ด์ œ๋  ๋•Œ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋”˜๊ฐ€์— ๋ณด๋‚ด์ฃผ๊ฑฐ๋‚˜ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

4. Extension

1 : Extension์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  1. extension์€ ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•, ํ”„๋กœํ† ์ฝœ ํƒ€์ž…์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  2. ๊ธฐ์กด์— ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

  3. ํ”„๋กœํผํ‹ฐ๋Š” ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ์™ธํ•œ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋งŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  4. deinit์€ ์ •์˜ํ•  ์ˆ˜ ์—†๊ณ  init์€ class์˜ ๊ฒฝ์šฐ์—๋Š” ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’ํƒ€์ž…์€ ๊ฒฝ์šฐ์—๋Š” ๋”ฐ๋ผ ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๋ฐ์ดํ„ฐํƒ€์ž…

1. Optional์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์˜ต์…”๋„์€ ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์Šค์œ„ํ”„ํŠธ์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋กœ ์•ˆ์ „์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค

์˜ต์…”๋„์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ์ฃ ?

  1. ์Šค์œ„ํ”„ํŠธ์—์„œ ์˜ต์…”๋„์ด ์•„๋‹Œ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์—๋Š” ๊ฐ’์ด ์—†์Œ์„ ์˜๋ฏธํ•˜๋Š” nil์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

  2. ์˜ต์…”๋„์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๊ฐ€ ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Œ์„ ์ง๊ด€์ ์œผ๋กœ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  3. ์˜ˆ๋กœ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ๊ตณ์ด ๋„˜๊ธฐ์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ต์…”๋„๋กœ ์ •์˜ํ•˜์—ฌ ๊ฐ’์ด ์—†์–ด๋„ ๊ดœ์ฐฎ์Œ์„ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์˜ต์…”๋„์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‚˜์š”?

  1. ์˜ต์…”๋„์€ ์ œ๋„ค๋ฆญ์ด ์ ์šฉ๋œ ์—ด๊ฑฐํ˜•์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค

  2. @frozen ํ‚ค์›Œ๋“œ๋Š” type ๋ณ€๊ฒฝ์„ ์ œํ•œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ต์…”๋„์— case๊ฐ€ ์ถ”๊ฐ€ ๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค

์˜ต์…”๋„์„ ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜์š”?

  1. ์Šค์œ„ํ”„ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ์˜ต์…”๋„์„ ๋ฒ—๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  2. if let ๊ตฌ๋ฌธ๊ณผ guard let ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…”๋„์„ ๋ฒ—๊ธด ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  3. ์˜ต์…”๋„ ๋ณ€์ˆ˜๋’ค์— ๋А๋‚Œํ‘œ๋ฅผ ๋ถ™์—ฌ ๊ฐ•์ œ ์ถ”์ถœ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, nil์ธ ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ์žˆ์Œ์„ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

2 : enum์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. ์—ด๊ฑฐํ˜•์€ ์—ฐ๊ด€๋œ ํ•ญ๋ชฉ๋“ค์„ ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ž…๋‹ˆ๋‹ค

  2. ์—ด๊ฑฐํ˜•์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ ํ•ญ๋ชฉ ๊ฐ’ ์ด์™ธ์—๋Š” ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

  3. ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์ (.)์„ ํ†ตํ•ด์„œ case์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  4. ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํƒ€๋ฅผ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  5. ์›์‹œ๊ฐ’์ด๋‚˜ ์—ฐ๊ด€๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””ํ…Œ์ผํ•œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

enum์˜ ์›์‹œ๊ฐ’์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. case์— ์›์‹œ๊ฐ’์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ, enum์„ ์„ ์–ธํ•  ๋•Œ ์ด๋ฆ„ ์˜†์— ์›์‹œ๊ฐ’์˜ type์„ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

  2. ์›์‹œ๊ฐ’์˜ type์€ Number, Character, String ์„ธ๊ฐ€์ง€๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

  3. ์›์‹œ๊ฐ’์€ type์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ๋ชจ๋‘ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค

  4. ์›์‹œ๊ฐ’์€ rawValue๋ผ๊ณ  ํ•˜๋Š” ์†์„ฑ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์—ด๊ฑฐํ˜•์˜ ์—ฐ๊ด€๊ฐ’์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ์—ฐ๊ด€๊ฐ’์€ case์— ์กฐ๊ธˆ๋” ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠœํ”Œ ํ˜•ํƒœ๋กœ ์›ํ•˜๋Š” ํƒ€์ž…์„ ๋ช…์‹œํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  2. ์—ฐ๊ด€๊ฐ’์€ ๋ชจ๋“  case๊ฐ€ ๊ฐ€์ ธ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ์˜ต์…˜์ž…๋‹ˆ๋‹ค

3. Swift์˜ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ์ปฌ๋ ‰์…˜ ํƒ€์ž…์€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Swift์˜ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์—๋Š” Array, Dictionary, Set์ด ์žˆ์Šต๋‹ˆ๋‹ค

  2. ๋ฐฐ์—ด์€ ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์œ„์น˜์— ๊ฐ™์€ ๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Array๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ์œ„์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋”•์…”๋„ˆ๋ฆฌ๋Š” ์ˆœ์„œ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ key-value ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ์˜ key๊ฐ’์€ Hashable ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ผ์•ผํ•˜๋ฉฐ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  4. ์„ธํŠธ๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ์—†์ด ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์„ธํŠธ ๋‚ด์˜ ๊ฐ’์€ ๋ชจ๋‘ ์œ ์ผํ•˜๋ฉฐ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Set๋Š” Hashable ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Array๋ณด๋‹ค Set์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ์ข‹์„ ๋•Œ๋Š” ์–ธ์ œ์ผ๊นŒ์š”?

  1. ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต์—†์ด ๊ณ ์œ ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ๋•Œ๋Š” Set์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

  2. Set์€ ์‚ฝ์ž…, ์‚ญ์ œ, ์กฐํšŒ๋ฅผ ๋ชจ๋‘ O(1) ์— ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‚ญ์ œ์™€ ์‚ฝ์ž…์ด ๋นˆ๋ฒˆํ•  ๋•Œ๋„ Set์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4 : Any์™€ AnyObject์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. Any๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ Any ํƒ€์ž…์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  2. AnyObject๋Š” Any๋ณด๋‹ค ์กฐ๊ธˆ ํ•œ์ •๋œ ์˜๋ฏธ๋กœ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  3. Any๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งค๋ฒˆ ํƒ€์ž… ํ™•์ธ ๋ฐ ๋ณ€ํ™˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค

  4. Swift๋Š” ํƒ€์ž…์— ์—„๊ฒฉํ•œ ์–ธ์–ด๋ผ๋Š” ํŠน์„ฑ์ด ์žˆ์–ด Any์™€ AnyObject์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

6. ํด๋กœ์ €

1 : Closure์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํด๋กœ์ €๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๋“ค์„ ๋ธ”๋ก์œผ๋กœ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.์Šค์œ„ํ”„ํŠธ์—์„œ ํ•จ์ˆ˜ํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  2. ํด๋กœ์ €๋Š” class์™€ ๊ฐ™์€ ์ฐธ์กฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

2 : Closure ์˜ ๊ฐ’ ์บก์ฒ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํด๋กœ์ €๋Š” ์ž์‹ ์ด ์ •์˜๋œ ์œ„์น˜์—์„œ ์™ธ๋ถ€์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ์บก์ณํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋กœ์ €๋Š” ๊ฐ’์˜ ํƒ€์ž…๊ณผ ๊ด€๊ณ„ ์—†์ด ๊ฐ’์„ ์บก์ณํ•  ๋•Œ **์ฐธ์กฐ** ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋งŒ์•ฝ value ํƒ€์ž…์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” Closure List๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋กœ์ €๋ฅผ ์„ ์–ธํ•  ๋‹น์‹œ์˜ ๊ฐ’์„ ์ƒ์ˆ˜๋กœ ์บก์ณํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์ˆ˜๋กœ ์บก์ณ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋กœ์ € ๋‚ด๋ถ€์—์„œ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • capture list

์ฐธ์กฐํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ด์Šˆ๊ฐ€ ์žˆ์„๊ฑฐ ๊ฐ™์€๋ฐ์š”?

ํด๋กœ์ €๋Š” ์ฐธ์กฐํƒ€์ž…์˜ ๊ฐ’์„ ์บก์ณํ•  ๋•Œ strong์œผ๋กœ ์บก์ณํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ RC๊ฐ’์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

ํด๋กœ์ €์˜ ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ๋Š” capture list๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ self๋ฅผ weak์œผ๋กœ ์บก์ณํ•˜์—ฌ RC๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

self๋ฅผ weak ๋ง๊ณ  unowned๋กœ ์บก์ณํ•˜๋ฉด ์•ˆ๋˜๋‚˜์š”?

๋งŒ์•ฝ ํด๋ž˜์Šค ๋‚ด์—์„œ ํด๋กœ์ €๊ฐ€ unowned๋กœ self๋ฅผ ์บก์ณํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‹œ์  ์ฐจ์ด๋กœ ์ธํ•ด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ nil์ด ํ• ๋‹น ๋œ ํ›„์—๋„ ํด๋กœ์ €์˜ ์ž‘์—…์ด ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

unowned๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋œ ๊ฒฝ์šฐ nil์„ ๋ฐ˜ํ™˜ํ•˜๋Š” weak ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Name Closure๋„ ๊ฐ’์„ ์บก์ณํ•˜๋‚˜์š”?

Name Closure์ธ ๊ฒฝ์šฐ์—๋Š” ์–ด๋””์— ์œ„์น˜ ํ•˜๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ „์—ญ ํ•จ์ˆ˜๋Š” ์–ด๋– ํ•œ ๊ฐ’๋„ ์บก์ณํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ค‘์ฒฉ ํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜์˜ ๊ฐ’์„ reference capture ํ•ฉ๋‹ˆ๋‹ค.

3 : Trailing Closure์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ œ์ผ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ํด๋กœ์ € ์ผ ๋•Œ ์†Œ๊ด„ํ˜ธ ๋ฐ–์—์„œ ํด๋กœ์ €๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ํ›„ํ–‰ ํด๋กœ์ €๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋งŒ์•ฝ ํŒŒ๋ผ๋ฏธํ„ฐ์— ํด๋กœ์ €๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋‹ค์ค‘ ํ›„ํ–‰ ํด๋กœ์ € ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ์†Œ๊ด„ํ˜ธ ๋ฐ–์—์„œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์—ด๊ณ  ๋‹ซ์œผ๋ฉฐ ํด๋กœ์ €๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  3. ํด๋กœ์ €์˜ ์–‘์ด ๊ธธ์–ด์ง€๋Š” ๊ฒฝ์šฐ ํ›„ํ–‰ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Xcode์—์„œ๋„ ํ›„ํ–‰ ํด๋กœ์ €์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ž๋™ ๋ณ€ํ™˜๋จ)

4 : Escpaing Closure์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•œ ํด๋กœ์ €๊ฐ€ ํ•จ์ˆ˜ ์ข…๋ฃŒ ์ดํ›„์— ํ˜ธ์ถœ๋  ๋•Œ ํƒˆ์ถœ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ํƒˆ์ถœ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํด๋กœ์ €๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž…๋‹ˆ๋‹ค.

  3. ์ฃผ๋กœ ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ•  ๋•Œ ํƒˆ์ถœ ํด๋กœ์ €๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ํด๋กœ์ €๋ฅผ ํƒˆ์ถœ ํด๋กœ์ €๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

  4. ํƒˆ์ถœ ํด๋กœ์ €๋Š” ํด๋กœ์ € ์•ž์— @escaping ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

5 : Function๊ณผ Closure์˜ ์ฐจ์ด์ ์„ ๋งํ•ด๋ณด์„ธ์š”

  1. ํด๋กœ์ €๋Š” ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ•จ์ˆ˜๋Š” ํด๋กœ์ €์˜ ํ˜•ํƒœ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜๋Š” ํด๋กœ์ €์— ์†ํ•ฉ๋‹ˆ๋‹ค.

  2. ํ•˜์ง€๋งŒ ์ฃผ๋กœ ์ด๋ฆ„์ด ์žˆ๋Š” ํด๋กœ์ €๋ฅผ ํ•จ์ˆ˜๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ , ์ต๋ช… ํด๋กœ์ €๋ฅผ ํด๋กœ์ €๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

7. ARC

1. ARC์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  • ARC๋Š” swift์—์„œ ์ฐธ์กฐํƒ€์ž…์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • ARC๋Š” ๋”์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ธ์ œ ํ•ด์ œํ• ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋Š” ์ธ์Šคํ„ด์Šค์˜ RC๊ฐ’์„ ํ†ตํ•ด ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์–ธ์ œ RC๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์–ธ์ œ ๊ฐ์†Œํ•˜๋‚˜์š”?

  • RC๊ฐ’์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•  ๋•Œ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์šฉ์ด ๋๋‚˜๊ฑฐ๋‚˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜์— nil์„ ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋ฉด RC๊ฐ’์ด ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

2. ์ฐธ์กฐ๋Š” ์–ด๋–ค๊ฒŒ ์žˆ๋‚˜์š”?

  • ์ฐธ์กฐ์˜ ์ข…๋ฅ˜๋Š” strong, weak, unowned ์„ธ ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

  • strong์€ ๊ฐ•ํ•œ ์ฐธ์กฐ๋ฅผ ํ•˜์—ฌ RC๊ฐ’์„ +1 ์ฆ๊ฐ€ ์‹œํ‚ค๋Š” ํ‚ค์›Œ๋“œ ์ž…๋‹ˆ๋‹ค.

  • weak๊ณผ unowned๋Š” RC๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ ์ž…๋‹ˆ๋‹ค.

weak๊ณผ unowned์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์š”?

  • weak์€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๋ฉด nil์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • unowned๋Š” ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๋”๋ผ๋„ ๊ทธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์—์„œ์˜ ์ฐจ์ด๋„ ์žˆ์Šต๋‹ˆ๋‹ค. unowned๋กœ ์ฐธ์กฐํ•  ๋•Œ๋Š” ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€๋งŒ, weak์œผ๋กœ ์ฐธ์กฐํ•  ๋•Œ๋Š” ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด์„œ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ์œ„ํ—˜ํ•œ๊ฑฐ ๊ฐ™์€๋ฐ unowned์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”?

  1. unowned๋Š” ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€๋งŒ, weak์€ ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

  2. ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ weak reference๋กœ ์ฐธ์กฐ๋  ๋•Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  3. ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ์ฐธ์กฐํ•˜๋Š”๊ฒƒ์€ ๊ทธ๋ ‡์ง€ ์•Š์„๋•Œ ๋ณด๋‹ค ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๊ทธ๋ž˜์„œ ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ํ™•์‹คํ•œ ๊ฒฝ์šฐ์—๋Š” unowned๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

strong, weak, unowned reference๋Š” ๊ฐ๊ฐ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ์š”?

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

  2. weak์€ ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. unowned๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ๋จผ์ € ํ•ด์ œ๋˜๋Š” ๊ฒƒ์ด ํ™•์‹คํ•œ ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3 : class๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

  1. class ์ธ์Šคํ„ด์Šค๋Š” strong, weak, unowned ์„ธ๊ฐ€์ง€ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ฐธ์กฐ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์€ ๊ฐ์ž์˜ reference counting์„ ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋งŒ์•ฝ weak count๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์—ฌ weak reference๋Š” ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

  3. ์ธ์Šคํ„ด์Šค์˜ RC๊ฐ’์ธ strong reference count ๊ฐ’์ด 0์ด ๋˜๋ฉด deinited ๋ฉ๋‹ˆ๋‹ค.

  4. deinited๋˜๋ฉด unowned count๊ฐ’์ด ๊ฐ์†Œํ•˜๊ณ  unowned count๊ฐ’์ด 0์ด ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

  5. ๋งŒ์•ฝ weak count๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์ด๋“œ ํ…Œ์ด๋ธ”์ด ๋‚จ์•„์žˆ๋Š” freed ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ ์ด๋•Œ weak count๊ฐ’์ด ๊ฐ์†Œํ•˜๊ณ  weak count๊ฐ’์ด 0์ด ๋˜๋ฉด, ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์˜ side table์ด ํ•ด์ œ๋˜๋ฉฐ ๊ฐ์ฒด๊ฐ€ ์™„์ „ํžˆ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.

8. ํ”„๋กœํ† ์ฝœ

1. ํ”„๋กœํ† ์ฝœ์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํ”„๋กœํ† ์ฝœ์ด๋ž€ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๊ธฐ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  2. ํ”„๋กœํ† ์ฝœ์€ ์ •์˜๋ฅผ ํ•˜๊ณ  ์ œ์‹œ๋งŒ ํ•  ๋ฟ, ์Šค์Šค๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  3. ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ„์— ์œ ์—ฐํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์ด ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฑ„ํƒํ•œ ํƒ€์ž…์€ ํ”„๋กœํ† ์ฝœ์ด ์ œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํ† ์ฝœ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ•˜์ง€ ๋ชปํ•˜๋‚˜์š”?

  1. ์•„๋‹ˆ์š”, ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด ์ถ”์ƒํด๋ž˜์Šค๋กœ์จ์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํ”„๋กœํ† ์ฝœ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์—†๊ณ , ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํ‘œํ˜„์ด ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

  3. ํ•˜์ง€๋งŒ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ”„๋กœํ† ์ฝœ๋กœ ์ •์˜ํ•˜๊ณ  extension์„ ํ†ตํ•ด ํ”„๋กœํ† ์ฝœ ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ์ถ”์ƒํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๊ฐœ๋…์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

ํ”„๋กœํ† ์ฝœ์—์„œ ์ •์˜๋œ ๊ธฐ๋Šฅ์€ ๋ฌด์กฐ๊ฑด ๊ตฌํ˜„ํ•ด์•ผ ํ• ๊นŒ์š”?

  1. ์•„๋‹ˆ์š”, ํ”„๋กœํ† ์ฝœ์€ ์„ ํƒ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๋‹จ, ์„ ํƒ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœํ† ์ฝœ์€ objc ์†์„ฑ์ด ๋ถ€์—ฌ๋œ ํ”„๋กœํ† ์ฝœ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์  ์š”๊ตฌ์‚ฌํ•ญ์ด ์ ์šฉ๋œ ํ”„๋กœํ† ์ฝœ์€ objc ์†์„ฑ์ด ๋ถ€์—ฌ๋œ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  4. ์„ ํƒ์  ์š”๊ตฌ์‚ฌํ•ญ์€ @objc optional ํ‚ค์›Œ๋“œ๋ฅผ ์š”๊ตฌ์‚ฌํ•ญ ์•ž์— ๋ถ™์—ฌ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2 : associatedType์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

associatedType์€ ํ”„๋กœํ† ์ฝœ ๋‚ด์—์„œ ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜์—ฌ ๊ตฌํ˜„ํ•  ๋•Œ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์—์„œ ์ผ์ข…์˜ ์ œ๋„ค๋ฆญ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

3 : Codable์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. Encodable๊ณผ Decodable ํ”„๋กœํ† ์ฝœ์˜ ํ•ฉ์„ฑ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

  2. Codable์„ ์ค€์ˆ˜ํ•˜๋Š” ํƒ€์ž…์€ ๋‹ค๋ฅธ ํ‘œํ˜„ ๋ฐฉ์‹์œผ๋กœ ์ƒํ˜ธ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋Œ€ํ‘œ์ ์œผ๋กœ JSONEncoder, JSONDecoder๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , JSON์„ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Codable๊ณผ NSCoding์˜ ์ฐจ์ด๋Š”?

  1. Codable์€ ํด๋ž˜์Šค, ์—ด๊ฑฐํ˜•, ๊ตฌ์กฐ์ฒด์— ๋ชจ๋‘ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ NSCoding์€ ํด๋ž˜์Šค ํƒ€์ž…์—๋งŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  2. NSCoding์€ NSObject๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ๋งŒ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ NSCoding์„ ์ฑ„ํƒํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ NSKeyedArchiver์™€ NSKeyedUnarchiver๋ฅผ ์‚ฌ์šฉํ•ด Data ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๋””์ฝ”๋”ฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

4 : Equatable ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํƒ€์ž…๋ผ๋ฆฌ ๋น„๊ต(==)์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ์ž…๋‹ˆ๋‹ค.

  2. ๊ธฐ๋ณธ ํƒ€์ž…์€ Equatable์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์–ด ๋น„๊ต ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ปค์Šคํ…€ ํƒ€์ž…์˜ ๊ฒฝ์šฐ ์ง์ ‘ ์ฑ„ํƒํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. ๊ตฌ์กฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ชจ๋‘ ๊ธฐ๋ณธ ํƒ€์ž…์ธ ๊ฒฝ์šฐ Equatable์„ ์ฑ„ํƒํ•˜๋ฉด ๋น„๊ต ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  4. ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ์ง์ ‘ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  5. ์—ด๊ฑฐํ˜•์˜ ๊ฒฝ์šฐ ์—ฐ๊ด€๊ฐ’์ด ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ Equatable์„ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ Equatable์„ ์ง์ ‘ ์ฑ„ํƒํ•ด์ค˜์•ผ ํ•˜๋ฉฐ, ์—ฐ๊ด€๊ฐ’์ด ๋ชจ๋‘ Equatable์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5. Hashable ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. Hashable์„ ์ฑ„ํƒํ•˜๋Š” ํƒ€์ž…์€ ๋ชจ๋‘ ๊ฐ’์„ ์ •์ˆ˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. Hashable์€ Equatable ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ Hashable์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์ง€๋งŒ, ์ปค์Šคํ…€ ํƒ€์ž…์˜ ๊ฒฝ์šฐ ์ง์ ‘ ์ฑ„ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  4. ๊ตฌ์กฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ชจ๋‘ ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ฉด Hashable์„ ์ฑ„ํƒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  5. ํด๋ž˜์Šค๋Š” ์ง์ ‘ hashํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ Equatable์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— == ํ•จ์ˆ˜๋„ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  6. ์—ด๊ฑฐํ˜•์˜ ๊ฒฝ์šฐ ์—ฐ๊ด€๊ฐ’์ด ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ Hashable์„ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ Hashable์„ ์ฑ„ํƒํ•ด์ค˜์•ผ ํ•˜๋ฉฐ, ์—ฐ๊ด€๊ฐ’์ด ๋ชจ๋‘ Hashable์„ ์ฑ„ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Equatable์„ ์™œ ์ฑ„ํƒํ•ด์•ผ ํ•˜๋‚˜์š”?

ํ•ด์‹œ๊ฐ’์€ ๊ณ ์œ ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ์œ ๊ฐ’์„ ์‹๋ณ„ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” == ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ Equatable์„ ์ฑ„ํƒํ•˜์—ฌ ==ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

9. ํ‚ค์›Œ๋“œ

1 : mutating ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ๊ธฐ๋ณธ์ ์œผ๋กœ Swift์—์„œ๋Š” ๊ตฌ์กฐ์ฒด๋‚˜ ์—ด๊ฑฐํ˜• ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  2. ํ•˜์ง€๋งŒ, mutating ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ์ˆ˜ ์•ž์— ๋ถ™์ด๋ฉด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•ด๋‹น ๊ตฌ์กฐ์ฒด๋‚˜ ์—ด๊ฑฐํ˜•์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2 : lazy ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. lazy๋Š” ์ง€์—ฐ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋กœ, ํ˜ธ์ถœ์ด ์žˆ์–ด์•ผ๋งŒ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค.

  2. lazy๋Š” ํ˜ธ์ถœ๋  ๋•Œ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๋ฏ€๋กœ init์‹œ์  ์ดํ›„์— ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ƒ์ˆ˜๊ฐ€ ์•„๋‹Œ๋ณ€์ˆ˜๋กœ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. lazy ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ €ํ•˜๋‚˜ ๊ณต๊ฐ„ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

lazy๋Š” ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‚˜์š”?

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

3 : typealias ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋งํ•ด์ฃผ์„ธ์š”

  1. ๊ธฐ์กด ํƒ€์ž…์— ์ƒˆ๋กœ์šด ์ด๋ฆ„(๋ณ„๋ช…)์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

  2. typealias๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. required ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํด๋ž˜์Šค๋‚˜ ํ”„๋กœํ† ์ฝœ์„ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  2. required ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ๋ฉ”์„œ๋“œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  3. ๋งŒ์•ฝ, override ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, override ํ‚ค์›Œ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5. some ๋ถˆ๋ช…ํ™• ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

10. ํŒจ๋Ÿฌ๋‹ค์ž„

1. Swift์˜ map, filter, reduce์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ์Šค์œ„ํ”„ํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜๋ฅผ ๊ณ ์ฐจ ํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, map, filter, reduce๋Š” ๋ชจ๋‘ ๊ณ ์ฐจํ•จ์ˆ˜์— ์†ํ•ฉ๋‹ˆ๋‹ค.

  3. map์€ ์ดˆ๊ธฐ๊ฐ’๊ณผ ํด๋กœ์ €๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„ ์ „๋‹ฌ๋ฐ›์€ ํด๋กœ์ €๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, ์ดˆ๊ธฐ ๊ฐ’์˜ ํƒ€์ž…์„ Int โ†’ String์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. filter๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๊ฑธ๋Ÿฌ์„œ ์ถ”์ถœํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ๋ชจ์•„ map๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, ์ดˆ๊ธฐ ๊ฐ’์ด Int์ธ ๊ฒฝ์šฐ 10์ด์ƒ์ธ ๊ฐ’๋งŒ ์ถ”์ถœ ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. reduce๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ํ•ฉ์ณ์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. reduce๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ํ•ฉ์น˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๊ฒฐ๊ณผ๋Š” ๋ฐฐ์—ด์ด ์•„๋‹Œ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

map์˜ ์ข…๋ฅ˜์ธ flatMap๊ณผ compactMap์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ๋‘ ํ•จ์ˆ˜๋Š” ์š”์†Œ๊ฐ€ ์ผ์ฐจ์› ๋ฐฐ์—ด์ผ ๋•Œ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ผ์ฐจ์› ๋ฐฐ์—ด์—์„œ ํด๋กœ์ €์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜ต์…”๋„์ผ ๋•Œ, nil์ธ ๊ฒฝ์šฐ nil์„ ์ œ๊ฑฐํ•˜๊ณ  ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, 2์ฐจ์› ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ nil์„ ์ œ๊ฑฐํ•˜์ง€์•Š์Šต๋‹ˆ๋‹ค.

  3. flatMap์€ ๊ฒฐ๊ณผ๋ฅผ 1์ฐจ์› ๋ฐฐ์—ด๋กœ(flatten) ๋งŒ๋“ค์–ด๋‚ด๊ณ , compactMap์€ 2์ฐจ์› ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

2. Protocol Oriented Programming๊ณผ Object Oriented Programming์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

11. function / method

1. function๊ณผ method์˜ ์ฐจ์ด๋ฅผ ๋งํ•ด๋ณด์„ธ์š”.

  1. funtion์€ ํŠน์ • ๊ฐ์ฒด์— ์†ํ•ด์žˆ์ง€ ์•Š์€ ์ฝ”๋“œ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค.

  2. method๋Š” ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋“ฑ ํŠน์ • ๊ฐ์ฒด ์•ˆ์—์„œ ์ •์˜ ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  3. function์€ ์™ธ๋ถ€ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, method๋Š” ์ž๊ธฐ๊ฐ€ ์†ํ•ด ์žˆ๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. instance ๋ฉ”์„œ๋“œ์™€ class ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  1. ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค์— ์†ํ•œ ํ•จ์ˆ˜๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋‚ด๋ถ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ๋œ ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. (์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด ์•ˆ์— ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ž„!!)

  2. ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์˜ ํƒ€์ž… ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ, ํƒ€์ž… ์ž์ฒด์— ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํƒ€์ž…์„ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. class ๋ฉ”์„œ๋“œ์™€ static ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  1. ๋‘ ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์˜ ํƒ€์ž… ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค.

  2. ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ํƒ€์ž… ์ž์ฒด์— ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋กœ, ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. static ๋ฉ”์„œ๋“œ๋Š” ์ƒ์† ํ›„ ๋ฉ”์„œ๋“œ ์žฌ์ •์˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ณ , class ๋ฉ”์„œ๋“œ๋Š” ์ƒ์† ํ›„ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํ•จ์ˆ˜์—์„œ ์™ธ๋ถ€์— ์žˆ๋Š” ๊ฐ’ํƒ€์ž… ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋ ๊นŒ์š”?

  1. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜์˜ ์ธ์ž๋Š” ์ƒ์ˆ˜ ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  2. ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” inout ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ• 

  3. inout ํ‚ค์›Œ๋“œ๋Š” ์ธ์ž์˜ ํƒ€์ž… ์•ž์— ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ•ด๋‹น ์ธ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌ ๋ฐ›๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

  4. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” ์ธ์ž ์•ž์— &๋ฅผ ๋ถ™์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๊ณ  ํ‘œ์‹œ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  5. inout์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. defer๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  1. defer๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ์ง€์—ฐํ•˜์—ฌ ํ•จ์ˆ˜ ์‹คํ–‰์‹œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ํ‚ค์›Œ๋“œ ์ž…๋‹ˆ๋‹ค.

  2. defer์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์€ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ง์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  3. ํ•จ์ˆ˜๋‚ด์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ ์ค‘ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ •๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฆฌ์†Œ์Šค ํ•ด์ œ, ์ž„์‹œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ, ํŒŒ์ผ ๋‹ซ๊ธฐ etc)

defer๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๊ณ , defer๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์—†์„๊นŒ์š”?

  1. defer๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•œ ์ˆœ์„œ์˜ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก์˜ ๊ฐ€์žฅ ์•„๋ž˜์— ์žˆ๋Š” defer๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  2. ๋งŒ์•ฝ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜, defer๋ฅผ ์ฝ๊ธฐ ์ „์— ํ•จ์ˆ˜๊ฐ€ return ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” defer๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  3. guard๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์— ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ, guard๋ฌธ ์•„๋ž˜์— ์žˆ๋Š” defer๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

defer๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ์š”?

  1. ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์˜ˆ๋ฅผ๋“ค์–ด ํ•จ์ˆ˜์—์„œ lock์„ ๊ฑธ์–ด ๋™๊ธฐํ™”๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— unlock์„ ํ•ด์ฃผ์–ด์•ผ ๋ฐ๋“œ๋ฝ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  3. ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋งˆ๋‹ค ํ•ด์•ผ ํ•˜๋Š” ํ–‰์œ„๋ฅผ ํ•จ์ˆ˜ ๋‚ด์— ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ return ์•ž์— ์จ์ฃผ๊ธฐ ๋ณด๋‹ค๋Š”, defer๋ฅผ ํ•จ์ˆ˜ ์ƒ๋‹จ์— ์„ ์–ธํ•ด์ฃผ๋ฉด ํ•จ์ˆ˜๊ฐ€ ์•Œ์•„์„œ ์ข…๋ฃŒ๋  ๋•Œ ํ•ด์•ผํ•˜๋Š” ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

12. ํ”„๋กœํผํ‹ฐ

1. ์ €์žฅ ํ”„๋กœํผํ‹ฐ์™€ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ์ฒด ๋‚ด์—์„œ ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœํผํ‹ฐ ์ž…๋‹ˆ๋‹ค.

  2. ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ดˆ๊ธฐ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค์˜ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ๊ฐ’์„ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ์ž…๋‹ˆ๋‹ค.

  4. ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค ๋‚ด๋ถ€์— ์žˆ๋Š” ์€๋‹‰ํ™” ๋œ ๊ฐ’์„ ๊ฐ„์ ‘์ ์œผ๋กœ ์ˆ˜์ • ๋˜๋Š” ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ ๊ตณ์ด ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”?

  1. ์ธ์Šคํ„ด์Šค์˜ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€ ๊ฐ’์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” getter, setter ๋‘ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ด๋Š” ๋‘ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ถ„์‚ฐ ๊ตฌํ˜„๋˜์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋Š” ๊ทธ ์—ญํ• ์„ ๋™์‹œ์— ํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ํ•˜์ง€๋งŒ, ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋Š” ์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์“ฐ๊ธฐ ์ „์šฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ์ง€์—ฐ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. ์ง€์—ฐ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค.

  2. lazy ํ‚ค์›Œ๋“œ๋ฅผ ํ”„๋กœํผํ‹ฐ ์•ž์— ๋ถ™์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ง€์—ฐ ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ €ํ•˜๋‚˜ ๊ณต๊ฐ„ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3 : property warrper์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  2. ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. @propertyWrapperํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‚ด๋ถ€์— ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ๋™์ž‘์„ ์ •์˜ํ•ด๋‘๋ฉด, ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋ฅผ ํ‚ค์›Œ๋“œ๋กœ ๋ถ™์—ฌ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ๋™์ž‘์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ํ‹€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ์—๋Ÿฌ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ์ƒํ™ฉ์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์œ„ ์ฝ”๋“œ๋ฅผ ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ค‘๋ณต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Userdefault์— ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋ฅผ ์ ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


13. ์ œ๋„ค๋ฆญ

  1. ์ œ๋„ค๋ฆญ์€ ํƒ€์ž…์„ ์ผ๋ฐ˜ํ™”ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋‚˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  2. ์ œ๋„ค๋ฆญ์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๋„ค๋ฆญ์˜ ํƒ€์ž… ์ œ์•ฝ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

  1. ์ œ๋„ค๋ฆญ์€ ํƒ€์ž…์„ ์ผ๋ฐ˜ํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํƒ€์ž…๋„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ œ์•ฝ์„ ๊ฑธ์–ด ํƒ€์ž…์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ๋ช…์‹œํ•  ๋•Œ ํŠน์ • ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ํƒ€์ž…๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ํƒ€์ž… ์ œ์•ฝ์€ ํด๋ž˜์Šค๋‚˜ ํ”„๋กœํ† ์ฝœ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

14. Subscript

  1. subscript๋Š” ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋“ฑ์—์„œ ์ปฌ๋ ‰์…˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  2. ์ปฌ๋ ‰์…˜ ์š”์†Œ๋Š” ๋ฐฐ์—ด, ๋”•์…”๋„ˆ๋ฆฌ, ์ง‘ํ•ฉ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  3. subscript๋Š” index๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ํ•จ์ˆ˜ ๋‚ด์—์„œ get๊ณผ set์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. get๋งŒ ์ž‘์„ฑํ•˜์—ฌ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. subscript๋ฅผ ์ž‘์„ฑํ•œ ํ›„์—๋Š” ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„ ๋’ค์— ๋Œ€๊ด„ํ˜ธ([])๋ฅผ ๋ถ™์—ฌ์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. subscript๋Š” ๊ตฌํ˜„๋ถ€ ๋˜๋Š” ์ต์Šคํ…์…˜ ๊ตฌํ˜„๋ถ€์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

String๋„ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋„ค, String์€ Character ์ปฌ๋ ‰์…˜ ํƒ€์ž… ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ๋ฌธ์ž์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


15. ์ถ”๊ฐ€ ๊ฐœ๋…

1. Resultํƒ€์ž…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์„ฑ๊ณต ํ˜น์€ ์‹คํŒจ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ ์—ด๊ฑฐํ˜•์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…”๋„๊ณผ ์ฐจ์ด์ ?

์˜ต์…”๋„์€ ๊ฐ’์ด ์—†์„ ๋•Œ ๋ฌด์กฐ๊ฑด nil์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, Result ํƒ€์ž…์€ ์‹คํŒจํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์—ฐ๊ด€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์Šค์œ„ํ”„ํŠธ์—์„œ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

  1. ์Šค์œ„ํ”„ํŠธ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ์˜ ์›ํ˜•์„ ํ”„๋กœํ† ์ฝœ์— ์„ ์–ธํ•ด๋‘๊ณ , ํ”„๋กœํ† ์ฝœ์„ extensionํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ์ถ”์ƒํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๊ฐœ๋…์˜ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Self์™€ self์˜ ์ฐจ์ด๊ฐ€ ๋ญ˜๊นŒ์š”?

  1. ๋Œ€๋ฌธ์ž Self๋Š” ํƒ€์ž… ์ž์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‚ค์›Œ๋“œ ์ž…๋‹ˆ๋‹ค.

  2. class, struct์˜ ์ž๊ธฐ ์ž์‹ ์˜ ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๊ฑฐ๋‚˜, ํ”„๋กœํ† ์ฝœ์—์„œ ํ•ด๋‹น ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  3. ์†Œ๋ฌธ์ž self๋Š” ์˜ˆ์•ฝ์–ด๋กœ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

4. @objc๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?

  1. Objective-C ๋Ÿฐํƒ€์ž„์— swift ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. swift์—์„œ ํ”„๋กœํ† ์ฝœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ static ๋””์ŠคํŒจ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, @objc๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์„œ๋“œ๋ฅผ ๋™์  ๋””์ŠคํŒจ์น˜๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

5. autoclosure attribute์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  1. ํ•จ์ˆ˜ ์ธ์ž์— autoclosure ์†์„ฑ์„ ๋ถ™์ด๋ฉด, ์ „๋‹ฌ๋˜๋Š” ์ธ์ž ์ฝ”๋“œ๋ฅผ ๊ฐ์‹ธ์„œ ์ž๋™์œผ๋กœ ํด๋กœ์ €๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

  2. ๋‹ค์‹œ ๋งํ•ด ์ผ๋ฐ˜ ํ‘œํ˜„์˜ ์ฝ”๋“œ๋ฅผ ํด๋กœ์ € ํ‘œํ˜„์˜ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํด๋กœ์ €์—๋Š” ์ธ์ž๊ฐ€ ์—†๊ณ  ๋ฆฌํ„ด๊ฐ’๋งŒ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. ํด๋กœ์ € ํ˜ธ์ถœ์— ํ•„์š”ํ•œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์—†์•ฐ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. Swift์—์„œ @autoclosure๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ assert()ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

6. Never ๋ฐ˜ํ™˜ ํƒ€์ž…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • ์—๋Ÿฌ ๋“ฑ์˜ ์ด์œ ๋กœ ์ •์ƒ์ ์œผ๋กœ ๋ฆฌํ„ด ๋˜์ง€์•Š๋Š” ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์–ด๋–ค ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. (The return type of functions that do not return normally, that is, a type with no values.)

7. ๋ชจ๋‚˜๋“œ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ๋ชจ๋‚˜๋“œ๋Š” ๊ฐ’์ด ์„ ํƒ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด(functor)์ž…๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜ ๊ฐ์ฒด(functor) = ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๊ณ ์ฐจ ํ•จ์ˆ˜ map ์„ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. Swift ์—์„œ๋Š” Array, Dictionary, Optional ๋“ฑ์ด ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

  • Swift ์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ชจ๋‚˜๋“œ๋Š” Optional ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Optional ์€ ๊ฐ’์ด ์„ ํƒ์ ์œผ๋กœ ์กด์žฌํ•˜๊ณ , map ์„ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ๋ชจ๋‚˜๋“œ๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด ์•ˆ์— ํฌํ•จ๋˜๋Š” ๊ฐœ๋…์ด์ง€๋งŒ, ํ•จ์ˆ˜ ๊ฐ์ฒด์™€์˜ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋ชจ๋‚˜๋“œ์—๋Š” flatMap (์˜ต์…”๋„ ํ•ด์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€) ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋‚˜๋“œ๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜ ๊ฐ์ฒด์—๋Š” flatMap ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜

Last updated