[Swift๐ฆฉ] #11 ๋ฉ์๋
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ์์ ํน์ ๊ธฐ๋ฅ์ ์บก์ํํ๋ ์ธ์คํดํธ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค.
ํ๋กํผํฐ์ฒ๋ผ ํ์
์ ๊ด๋ จ๋ ๋ฉ์๋๋ ์ ์ ๊ฐ๋ฅ.
๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์์๋ ๊ฐ๋ฅํ๋ค๋๊ฒ 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 ๋ฉ์๋์ ์ฐจ์ด์ ์ ์ค๋ช ํ์์ค.
- instance method : struct, class, enum ์ ๊ฐ ์ธ์คํด์ค๊ฐ ๊ฐ์ง๋ ๋ฉ์๋. ์ฌ๊ธฐ์์ self ๋ ํด๋น ์ธ์คํด์ค๋ฅผ ์๋ฏธํ๊ฒ ๋๋ค.
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
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Swift๐ฆฉ] #11 ๋ฉ์๋), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@ddosang/Swift-11-๋ฉ์๋์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค