[Swift๐Ÿฆฉ] #11 ๋ฉ”์„œ๋“œ

10186 ๋‹จ์–ด swiftiOSiOS

ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ์—์„œ ํŠน์ • ๊ธฐ๋Šฅ์„ ์บก์Šํ™”ํ•˜๋Š” ์ธ์Šคํ„ดํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ ํƒ€์ž…์— ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋„ ์ •์˜ ๊ฐ€๋Šฅ.
๊ตฌ์กฐ์ฒด์™€ ์—ด๊ฑฐํ˜•์—์„œ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š”๊ฒŒ C/obj-C ์™€ Swift ์˜ ํฐ ์ฐจ์ด์ .

1. Instance Method

ํ•จ์ˆ˜์™€ ๋ฌธ๋ฒ•์€ ๋™์ผํ•˜๋‹ค! ๊ทธ์ € ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋‚ด์—์„œ ์„ ์–ธํ•  ๋ฟ!

  • ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ํƒ€์ž… ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

self property โญ๏ธ

  • ์ธ์Šคํ„ด์Šค๋Š” ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ self ๋ผ๋Š” ์•”์‹œ์ ์ธ ํ”„๋กœํผํ‹ฐ ๊ฐ€์ง.
  • ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ์“ฐ์ง€ ์•Š์•„๋„ ํฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ, ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์ด ๋™์ผํ•  ๋•Œ๋Š” ๋ช…์‹œํ•ด์ค˜์•ผํ•œ๋‹ค.
var x = 10
func changeX(x: Int) {
    self.x = x
}

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์—์„œ value type ์ˆ˜์ • - mutating

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์˜ ๊ฐ’ ํƒ€์ž…์—์„œ ํ”„๋กœํผํ‹ฐ ์ˆ˜์ •์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • mutating ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด, ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์•”์‹œ์  self ํ”„๋กœํผํ‹ฐ์— ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ•œ ๋’ค, ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๋Œ€์ฒด.
  • ๋‹น์—ฐํžˆ let ์ด๋ฉด mutating ํ‚ค์›Œ๋“œ๋กœ๋„ ์†๋Œˆ ์ˆ˜ ์—†๋‹ค.
struct Album {
    var price = 15000
    mutating func upPrice(to newPrice: Int) {
        price = newPrice
    }
    
    mutating func downPrice(to newPrice: Int) {
        // ์ด๋ ‡๊ฒŒ ์•„์˜ˆ self ๋ฅผ ์žฌํ• ๋‹น ํ•ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.
        self = Album(price: newPrice)
    }
}

var album = Album(price: 17000)
album.upPrice(to: 19000)

enum ์—์„œ๋„ self ๋ฅผ ์ด์šฉํ•œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ!!

enum TriStateSwitch {
    case off, low, high
    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}

var ovenLight = TriStateSwitch.low

ovenLight.next()
// ovenLight is now equal to .high
ovenLight.next()
// ovenLight is now equal to .off

2. Type Method

ํƒ€์ž… ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ, ํŠน์ • ํƒ€์ž… ์ž์ฒด์— ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ.

static

ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

  • ํƒ€์ž… ๋ฉ”์„œ๋“œ ๋‚ด์˜ self ๋Š” ํƒ€์ž… ๊ทธ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๋‹ค๋ฅธ ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
struct Point {
    var x: Int
    var y: Int
}

extension Point: Equatable {
    static func == (lhs: Point, rhs: Point) {
        return (lhs.x == rhs.x) && (lhs.y == rhs.y)
    }
}

class

ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋Š” class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค.
ํด๋ž˜์Šค ์•ˆ์—์„œ ์ •์˜๋˜๋Š” ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์˜ class method ๋ฅผ ์ƒ์†ํ•˜์—ฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์„œ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.



์งˆ๋ฌธ

instance ๋ฉ”์„œ๋“œ์™€ class ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  1. instance method : struct, class, enum ์˜ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ. ์—ฌ๊ธฐ์—์„œ self ๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•˜๊ฒŒ ๋œ๋‹ค.
  2. class method (obj-c ์˜ type method) : type ์ž์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ๋กœ, ์—ฌ๊ธฐ์—์„œ self ๋Š” ํƒ€์ž… ๊ทธ ์ž์ฒด๋ฅผ ๋งํ•˜๊ฒŒ ๋œ๋‹ค.

+) ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„์—๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ, ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


static ๋ฉ”์„œ๋“œ์™€ class ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

์ฃผ๋œ ์ฐจ์ด์ ์€ ์—ญ์‹œ, class ๋ฉ”์„œ๋“œ๋Š” ์ƒ์†์œผ๋กœ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.


mutating ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

mutating ์€ ๊ฐ’ ํƒ€์ž…์ด๋ผ ์ธ์Šคํ„ด์Šค ๋‚ด์˜ ๊ฐ’์„

point.x = 10

struct Point {
    var x: Int = 10
    var y: Int = 20
    
    func changeX(newX: Int) {
        x = newX
    }
}

์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์—์„œ ์ธ์Šคํ„ด์Šค ๋‚ด์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ, ํ•จ์ˆ˜ ์•ž์— ๋ถ™์—ฌ์ฃผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

mutating func changeX(newX: Int) {
    x = newX
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด self์— ์ƒˆ๋กœ์šด struct/enum ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ , ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ฐ”๊พธ์–ด์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๊ธฐ์กด ์ธ์Šคํ„ด์Šค ๋Œ€์‹  ์ƒˆ๋กœ์šด(์›ํ•˜๋Š” ๋Œ€๋กœ ๊ฐ’์ด ๋ฐ”๋€) ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.



์ฐธ๊ณ 

https://bbiguduk.gitbook.io/swift/language-guide-1/methods
https://sujinnaljin.medium.com/swift-static๊ณผ-class-method-property-ํšจ๊ณผ์ ์œผ๋กœ-์‚ฌ์šฉํ•˜๊ธฐ-b336311a923c

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ