Skip to content

Latest commit

ย 

History

History

CHAPTER2

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 

Contents

  • MVC
  • Model
  • Struct vs Class
  • Sequence
  • static
  • lazy
  • indicies

MVC

Model

๊ณต๊ฐœ API๊ฐ€ ๋ญ”์ง€ ๋จผ์ € ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋””์ž์ธ ํ•˜๋ฉด ๊ทผ๋ณธ์ ์œผ๋กœ ๋ญ˜ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ง€ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๋””์ž์ธ ํ•  ์ง€ ๋ช…๋ฃŒํ•˜๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

struct Card {
  var isFaceUp = false
  var isMatched = false
  var identifier: Int
}

์—ฌ๊ธด Model์ด๋ฏ€๋กœ ์ด๋ชจํ‹ฐ์ฝ˜์ด๋‚˜ ์ด๋ฏธ์ง€ ๊ฐ™์€ ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์งˆ์ง€์— ๊ด€ํ•œ ์ •๋ณด๋Š” ๋‹ด๊ณ  ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

Struct vs Class

Struct

  • ์ƒ์†์„ฑ x
  • value type

Class

  • ์ƒ์†์„ฑ o
  • reference type

Struct๋Š” ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š”๋ฐ, swift๋Š” ๋ณต์‚ฌํ•  ๋•Œ ๋งค์šฐ ๋˜‘๋˜‘ํ•˜๋‹ค, ๋ชจ๋‘ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ๋งŒ ์‹ค์ œ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ „๋‹ฌ๋ฐฉ์‹ - ์“ฐ๊ธฐ ์‹œ ๋ณต์‚ฌ

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

Class ๋Š” ๋ชจ๋“  ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋˜๋ฉด ์ž๋™์œผ๋กœ init์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

struct ๊ฐ€ ๊ฐ–๋Š” ๊ธฐ๋ณธ init์€ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์ •์˜์‹œ ์ด๋ฏธ ์ดˆ๊ธฐํ™”ํ•œ๊ฒŒ ์žˆ๋”๋ผ๋„

Sequence

์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์—์„œ ์‹œ์ž‘ํ•ด ๋‹ค์Œ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ Sequnce๋ผ๊ณ  ํ•œ๋‹ค.

Array, String์„ sequnce๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

static

static method๋Š” ํŠน์ • ํด๋ž˜์Šค ์•ˆ์— ์žˆ์ง€๋งŒ ํŠน์ • ํด๋ž˜์Šค์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค. ํŠน์ • ํด๋ž˜์Šค๋Š” static์„ ์ดํ•ดํ•  ์ˆ˜ ์—†๋‹ค. ์˜ค์ง ํด๋ž˜์Šค ํƒ€์ž…๋งŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํƒ€์ž… ์ž์ฒด์—๊ฒŒ ์š”์ฒญํ•˜๋Š”๊ฑธ ์ •์  ์ด๋ผ๊ณ  ํ•œ๋‹ค.

struct Card {
  var isFaceUp = false
  var isMatched = false
  var identifier: Int
  
  static var identiferFactory = 0
  
  static func getUniqueIdentifier() -> Int {
    //Card.identifierFactory += 1
    //return Card.identifierFactory
    // Card Class ์•ˆ ์ด๋ฏ€๋กœ ์œ„์ฒ˜๋Ÿผ ์ ์ง€ ์•Š๊ณ  ํด๋ž˜์Šค๋ฅผ ์ƒ๋žตํ•œ๋‹ค.
    identiferFactory += 1
    return identiferFactory
  }
  
  func init() {
    identifier = Card.getUniqueIdentifer
  }
}

lazy

Swift ์—์„œ๋Š” ์–ด๋–ค ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋“  ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋„์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด lazy

์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ lazy๋กœ ๋งŒ๋“ค๋ฉด ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‹ค์ œ๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋‹ค๊ณ  ์ณ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// Error!
// Concentration๊ณผ cardButtons๋Š” ๋ชจ๋‘ ์ดˆ๊ธฐํ™” ๋˜์–ด์•ผ ํ•˜๋Š” ๋Œ€์ƒ
// game์„ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ์žˆ๋Š” ๋„์ค‘์— ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
var game = Concentration(numberOfPairsOfCards: (cardButtons.count + 1)/2)

// Ok
// ์‚ฌ์šฉํ•˜๊ธฐ ์ „๊นŒ์ง€ ์‹ค์ œ๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์ง€๋งŒ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋‹ค๊ณ  ์ณ์ค€๋‹ค.
lazy var game = Concentration(numberOfPairsOfCards: (cardButtons.count + 1)/2)

ํ•˜์ง€๋งŒ lazy๊ฐ€ ๋˜๋ฉด didSet๊ณผ ๊ฐ™์€ Property Observer๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

indicies

indicies๋Š” ๋ฐฐ์—ด์˜ ๋ฉ”์†Œ๋“œ๋‹ค. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. CountableRange ํƒ€์ž…์ด๋‹ค.