์ƒˆ์†Œ์‹

๐Ÿ“ฑ 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๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์ž.

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

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

 

 

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

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()

 

 

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

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

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

 

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

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

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

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

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