์ค์ํํธ์์ ํจ์์ ์ข
๋ฅ
์ค์ํํธ์์ ํจ์๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋๋ค. ์ธ์คํด์ค ๋ฉ์๋์ ํ์
๋ฉ์๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ์
๋ฉ์๋๋ ๋ค์ 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
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ฒ ์ง)