DEV_Larva

๊ตฌ์กฐ์ฒด ๋ณธ๋ฌธ

iOS/Swift ๋ฌธ๋ฒ•

๊ตฌ์กฐ์ฒด

NelchuPapa 2022. 8. 14. 00:39
๋ฐ˜์‘ํ˜•

๐Ÿง‘‍๐Ÿ’ป์ด๋ฒˆ Swift ์‹œ๊ฐ„์— ๋ฐฐ์›Œ๋ณผ ๊ฒƒ์€  ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป

 

  • ๊ตฌ์กฐ์ฒด ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• 
  • ๋™์  ๊ณ„์‚ฐ ๋ฐฉ๋ฒ• 
  • ์†์„ฑ ๊ด€์ฐฐ์ž

 


1. ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ

 

 

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

 

 

struct Album {
    let title: String
    let artist: String
    let year: Int

    func printSummary() {
        print("\(title) (\(year)) by \(artist)")
    }
}

 

์œ„ ์˜ˆ์ œ๋ฅผ Album์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด์— ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์™€ ์ •์ˆ˜ ์ƒ์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. 

๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด String๊ณผ Int์™€ ๊ฐ™์ด ์ƒ์„ฑ, ํ• ๋‹น, ๋ณต์‚ฌ ์ž‘์—…๋“ค๋„ ๋‹คํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ ์˜ˆ์ œ์—์„œ๋Š” ์•จ๋ฒ”์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡ ๊ฐœ์˜ ์•จ๋ฒ”์„ ์˜ˆ๋ฅผ ๋“ค์–ด ๋งŒ๋“ค์–ด๋ณด๊ณ  ๊ทธ๊ฒƒ์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•ด ๋ณด์ž.

 

 

 

let red = Album(title: "Red", artist: "Taylor Swift", year: 2012)
let wings = Album(title: "Wings", artist: "BTS", year: 2016)

print(red.title)
print(wings.artist)

red.printSummary()
wings.printSummary()

 

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ์œ„ Album๊ตฌ์กฐ์ฒด์— ์ •์˜๋œ ์ˆœ์„œ๋Œ€๋กœ ์ œ๋ชฉ, ๊ฐ€์ˆ˜๋ช…, ๋…„๋„๋ฅผ ์ž˜ ์ง€์ผœ์„œ ๊ฐ ์ƒ์ˆ˜์— ๋Œ€ํ•œ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค. 

red์™€ wings ๋ชจ๋‘ Album๊ตฌ์กฐ์ฒด์—์„œ ์ œ๊ณต๋˜์ง€๋งŒ ์ผ๋‹จ ์ƒ์„ฑํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌ๋œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  printSummary()๋ฅผ ํ†ตํ•ด ์œ„์ชฝ์—์„œ ํ•จ์ˆ˜๋กœ ์„ ์–ธํ•ด ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— red.printSummary()์˜ ๊ฒฐ๊ณผ๋Š” "Red(2012) by Taylor Swift"์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. 

 

 

๊ณ„์†ํ•ด์„œ ์ด๋ฒˆ ํŒŒํŠธ์—์„œ๋Š” ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๊ณต๋ถ€ํ•˜๊ฒ ์ง€๋งŒ ๊ฐ„๋‹จํžˆ ๊ตฌ์กฐ์ฒด์˜ ๊ทœ์น™๊ณผ ๊ฐœ๋…์ ์ธ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜์ž๋ฉด

 

  • ๊ตฌ์กฐ์ฒด์—  ์†ํ•˜๋Š” ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋ฅผ ์†์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค. 
  • ๊ตฌ์กฐ์ฒด์— ์†ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. 
  • ๊ตฌ์กฐ์ฒด์—์„œ ์ƒ์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ์ด๊ฒƒ์„ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•œ๋‹ค. 

 

 


 

 

 

2. ์†์„ฑ ๊ฐ’ ๋™์  ๊ณ„์‚ฐ๋ฒ•

 

๊ตฌ์กฐ์ฒด๋Š” ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ €์žฅ ์†์„ฑ์€ ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ์•ˆ์— ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜ ๋˜๋Š” ์ƒ์ˆ˜์ด๋‹ค.

๊ณ„์‚ฐ๋œ ์†์„ฑ์€ ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๋™์ ์œผ๋กœ ์†์„ฑ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ฆ‰ ์ €์žฅ๋œ ์†์„ฑ์ฒ˜๋Ÿผ ์ ‘๊ทผ๋˜์ง€๋งŒ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

struct Employee {
    let name: String
    var vacationRemaining: Int
}

var archer = Employee(name: "Sterling Archer", vacationRemaining: 14)
archer.vacationRemaining -= 5
print(archer.vacationRemaining)
archer.vacationRemaining -= 3
print(archer.vacationRemaining)

 

๊ตฌ์กฐ์ฒด Employee์—์„œ๋Š” ํ•ด๋‹น ์ง์›์˜ ๋‚จ์€ ํœด๊ฐ€ ์ผ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด ์ฃผ๋Š” ๊ฒƒ์ธ๋ฐ ๋งŒ์•ฝ ์ €๋Ÿฐ ์‹์œผ๋กœ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด 14์ผ์˜ ํœด๊ฐ€๋ฅผ ํ• ๋‹นํ•œ ๋‹ค์Œ ์ผ์ˆ˜์— ๋”ฐ๋ผ ์ฐจ๊ฐํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•ด๋ฒ„๋ฆฌ๋ฉด ์›๋ž˜ ๋ถ€์—ฌ๋œ ์ผ์ˆ˜๊ฐ€ ์†์‹ค๋œ๋‹ค. 

 

 

 

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ๋ง๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊ฟ”์„œ ๊ณ„์‚ฐ๋œ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์กฐ์ •ํ•ด ๋ณด์ž 

struct Employee {
    let name: String
    var vacationAllocated = 14
    var vacationTaken = 0

    var vacationRemaining: Int {
        vacationAllocated - vacationTaken
    }
}


var archer = Employee(name: "Sterling Archer", vacationAllocated: 14)
archer.vacationTaken += 4
print(archer.vacationRemaining)
archer.vacationTaken += 4
print(archer.vacationRemaining)

 

์ด์ œ๋Š” ํœด๊ฐ€๋ฅผ ์ง์ ‘ ๋ฐฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚จ๊ฒจ๋‘๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฃผ์–ด์ง„ ํœด๊ฐ€์—์„œ ์–ผ๋งˆ๋งŒํผ์˜ ํœด๊ฐ€๋ฅผ ๋ƒˆ๋Š”์ง€๋ฅผ ๋นผ์„œ ๊ณ„์‚ฐํ•ด ๋ณด์•˜๋‹ค. 

 

 

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์†์„ฑ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์„ ์ฝ์ง€๋งŒ ์‚ฌ์‹ค ๋’ค์—์„œ๋Š” swift๊ฐ€ ๋งค๋ฒˆ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ Swift๋Š” ๊ทธ๊ฑธ ์•Œ๋ ค ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๊ฑธ ์šฐ๋ฆฌ๊ฐ€ ์ž„์˜๋กœ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” getter์™€ setter๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ ํ•œ๋‹ค. 

getter์˜ ๊ฒฝ์šฐ ์ด๋ฏธ ๊ธฐ์กด ์ฝ”๋“œ์— ์ œ๊ณตํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„˜์–ด๊ฐ€์„œ setter๋ฅผ ๋ณด์ž!

 

vacationRemaining ํ•˜๋Š” ๊ฒฝ์šฐ ์ง์›์˜ vacationAllocated์˜ ๊ฐ’์„ ๋†’์ด๊ฑฐ๋‚˜ ๋‚ฎ์ถ”๊ธฐ๋ฅผ ์›ํ• ๊นŒ, ์•„๋‹ˆ๋ฉด vacationAllocated๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ๋Œ€์‹  ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜ vacationTaken์ผ๊นŒ?๐Ÿค” 

 

ํ•จ์ˆ˜๋ช…์ด ๋„ˆ๋ฌด ๋น„์Šทํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์ดํ•ด๋ ฅ์ด ๋ถ€์กฑํ•œ์ง€ ์งˆ๋ฌธ์ž์ฒด๊ฐ€ ์ดํ•ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค..

 

๊ตญ์–ด๋„ ์–ด๋ ต๋‹ค..

 

 

 

๋„˜์–ด๊ฐ€์„œ ์ด ๋‘ ๊ฐ€์ง€ ์ค‘์— ์ฒซ ๋ฒˆ์งธ๊ฐ€ ๋งž๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด 

var vacationRemaining: Int {
    get {
        vacationAllocated - vacationTaken
    }

    set {
        vacationAllocated = vacationTaken + newValue
    }
}

๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ ์‹คํ–‰ํ•  ๊ฐœ๋ณ„ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ Swift์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๋Š” newValue์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‚ฐ์— ํ• ๋‹นํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๋ชจ๋“  ๊ฐ€์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

Getter์™€ Setter๋ฅผ ๋ชจ๋‘ ๋ฐฐ์น˜ํ•˜๋ฉด ์ด์ œ vacationRemaining์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 


 

 

3. ์†์„ฑ ๊ด€์ฐฐ์ž 

 

Swift๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์†์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ์†์„ฑ ๊ด€์ฐฐ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์†์„ฑ ๊ด€์ฐฐ์ž๋Š” ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • didSet : ์†์„ฑ์ด ๋ณ€๊ฒฐ๋ ๋•Œ ์‹คํ–‰ 
  • willSet : ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์— ์‹คํ–‰ 

 

 

์ด์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์™œ ์†์„ฑ ๊ด€์ฐฐ์ž๊ฐ€ ํ•„์š”ํ•œ์ง€ ์•Œ์•„๋ณด์ž.

struct Game {
    var score = 0
}

var game = Game()
game.score += 10
print("Score is now \(game.score)")
game.score -= 3
print("Score is now \(game.score)")
game.score += 1

 

Game ๊ตฌ์กฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ ์ˆ˜๊ฐ€ ์•„๋ž˜์—์„œ 3๋ฒˆ ์ˆ˜์ •๋œ๋‹ค. ์ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค print() ์ค„๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ์ƒ์— ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋งˆ์ง€๋ง‰์— ์ธ์‡„๋˜์ง€ ์•Š๊ณ  ์ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. 

 

์—ฌ๊ธฐ์„œ ์†์„ฑ ๊ด€์ฐฐ์ž์ธ didSet์„ ์‚ฌ์šฉํ•˜์—ฌ print() ์†์„ฑ๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋ณด์ž. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์–ธ์ œ๋“ ์ง€ ์›ํ•  ๋•Œ ํ•ญ์ƒ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๋กœ ํ™•์ธํ•ด ๋ณด์ž๐Ÿ•ต๏ธ‍โ™‚๏ธ

 

 

 

struct Game {
    var score = 0 {
        didSet {
            print("Score is now \(score)")
        }
    }
}

var game = Game()
game.score += 10
game.score -= 3
game.score += 1

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

 

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด ์–ด๋А ์ชฝ์„ ์„ ํƒํ•˜๋˜์ง€ ๊ฐ„์— ์†์„ฑ ๊ด€์ฐฐ์ž์—๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ์ž‘์—…์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ๊ณ„์†ํ•ด์„œ ์š”๊ตฌํ•˜๋ฉด ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ผ์„ ํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 


learning by repetition

 

 

 

๋ฐ˜์‘ํ˜•

'iOS > Swift ๋ฌธ๋ฒ•' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์•ก์„ธ์Šค ์ œ์–ด & ๋ฉ”์„œ๋“œ  (0) 2022.08.16
ํด๋กœ์ € & ํ›„ํ–‰ ํด๋กœ์ €  (0) 2022.08.08
๋งค๊ฐœ๋ณ€์ˆ˜  (0) 2022.07.24
ํ•จ์ˆ˜  (0) 2022.07.23
๋ฐ˜๋ณต๋ฌธ  (0) 2022.07.15