์ƒˆ์†Œ์‹

๐Ÿ“ฑ iOS/-- Swift 5

(Swift) ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ , ํƒ€์ž… ๋ฉ”์„œ๋“œ (instance method, type method)

  • -

์Šค์œ„ํ”„ํŠธ์—์„œ ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜

์Šค์œ„ํ”„ํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์™€ ํƒ€์ž… ๋ฉ”์„œ๋“œ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์‹œ static method, class method๋กœ ๋‚˜๋‰œ๋‹ค.

  • Instance Method
  • Type Method
    • Static Method
    • Class Method
class ExampleClass{
  func instanceMethod(){}   // ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ
  class func classMethod(){} // ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ (ํƒ€์ž… ๋ฉ”์„œ๋“œ)
  static func staticMethod(){} // ์Šคํƒœํ‹ฑ ๋ฉ”์„œ๋“œ (ํƒ€์ž… ๋ฉ”์„œ๋“œ)
}

๋ชจ์–‘์„ ๋ณด๋‹ˆ ๋ณ„๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ ์—†์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋˜๊ฒƒ์„ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  class ๋˜๋Š” static ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ผ๊ณ ํ•œ๋‹ค.

3๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์ž.

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ (Instance Method)

ํŠน์ • ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•...) ์— ์†ํ•œ ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

struct ExampleStruct{
  var count: Int = 0 {
    didSet{
      // count๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ์‹œ์ž
      print("count๊ฐ€ ๋ณ€๊ฒฝ๋จ-> \(count)")
    }
  }
  mutating func countUp(){ // ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ
        self.count += 1
  }
}

๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค. . ์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.

var exampleStruct = ExampleStruct()
exampleStruct.countUp()
exampleStruct.countUp()
>>> count๊ฐ€ ๋ณ€๊ฒฝ๋จ-> 1
>>> count๊ฐ€ ๋ณ€๊ฒฝ๋จ-> 2

 

 

ํƒ€์ž… ๋ฉ”์„œ๋“œ (Type Method)

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

Example.classMethod()

๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•œ๊ฐ€์ง€ ์ค‘์š”ํ•œ์ ์€ ํƒ€์ž… ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ self ๋Š” ํƒ€์ž… ๊ทธ ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. (์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด)

class SuperClass{
    class func printName(){
        print("this is \(self)")
    }

    static func printName2(){
        print("this is \(self)")
    }
}

class SubClass: SuperClass {
    override class func printName(){   // >>> ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ
        print("this is \(self)")
    }

    override static func printName2(){ // >>> ์˜ค๋ฒ„๋ผ์ด๋“œ ๋ถˆ๊ฐ€ ์ปดํŒŒ์ผ ์—๋Ÿฌ
        print("this is \(self)")
    }

}

SuperClass.printName()  // ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํƒ€์ž… ์ž์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
SubClass.printName()        

 

 

๊ทธ๋Ÿผ static ๋ฉ”์„œ๋“œ์™€ static๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ?

class ๋ฉ”์„œ๋“œ: override ๊ฐ€๋Šฅํ•˜๋‹ค.

static ๋ฉ”์„œ๋“œ: override๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ์ฐจ์ด์—์„œ ๋‚˜์˜ค๋Š” ์ฐจ์ด๊ฐ€ ํ•œ๊ฐ€์ง€ ๋” ์žˆ๋‹ค. ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•œ struct๋‚˜ enum์—์„œ class func๋ฅผ ์ •์˜ํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (ํ‚ค์›Œ๋“œ ์ด๋ฆ„์ฒ˜๋Ÿผ class์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋„ค)

 

๊ทธ๋Ÿผ ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ ์“ฐ๋ฉด ์ข‹์„๊นŒ?

static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํƒ€์ž… ์ž์ฒด์™€ ์—ฐ๊ด€๋ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค์‹œ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์œ ์ผํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. (์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์—์„œ๋„ static ์„ ์‚ฌ์šฉํ•œ๋‹ค.)

์˜ˆ๋ฅผ๋“ค์–ด "๋ณผ๋ฅจ" ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์™€ "์˜ํ™” ์žฌ์ƒ", "์Œ์•… ์žฌ์ƒ"์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค. ๋ณผ๋ฅจ์€ ์‹œ์Šคํ…œ์—์„œ ์œ ์ผํ•œ ๊ฐ’์ด์–ด์•ผ ํ•˜๋ฉฐ, ์˜ํ™” ์žฌ์ƒ๊ณผ ์Œ์•… ์žฌ์ƒ์„ ์˜ค๊ณ ๊ฐ€๋”๋ผ๋„ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ์•ˆ๋œ๋‹ค. ์ด๋•Œ ๋ณผ๋ฅจ์— static ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•Œ๋งž์„๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ณผ๋ฅจ์„ ์กฐ์ ˆํ•˜๋Š” ๋™์ž‘์„ static func mute(){} ๋“ฑ์œผ๋กœ static ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

โ€‹ (+ ์ด ์™€์ค‘์— ์ƒ์†์ด ํ•„์š”ํ•˜๋‹ค๋ฉด class ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ง€)

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.