[Swift๐ฆฉ] #12 ์๋ธ์คํฌ๋ฆฝํธ
- ์ฝ๋ ์ , ๋ชฉ๋ก, ์ํ์ค ๋ฉค๋ฒ ์์์ ์ ๊ทผํ ์ ์๋ ๋จ์ถํค
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์์ ์ ์ ๊ฐ๋ฅ.
arr[index]
, dict[key]
์ ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก ์ธ์คํด์ค ์์ ์์์ ์ ๊ทผํ๋ ๊ฒ.
1. ๊ตฌ๋ฌธ
computed property ์ ์ ์ฌ
supscript(index: Int) -> Int {
get {
// subscript ์ ๋ํ ๊ฐ์ return
}
set(newValue) {
// set
// ๊ธฐ๋ณธ์ ์ผ๋ก newValue ๋ผ๋ ์ธ์๊ฐ ์ ๊ณต๋๋ฉฐ,
// ์๋ธ์คํฌ๋ฆฝํธ์ ๋ฐํ ๊ฐ๊ณผ ๋์ผํ๋ค.
// set ์ ์์ ์ ์์.
}
}
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// Prints "six times three is 18"
2. ์ฌ์ฉ
- ๋ณดํต์ ๋ฐ๋ก๊ฐ๊ธฐ๋ก ์ฌ์ฉ๋จ.
- optional ์ subscript type ์ ์ฌ์ฉํ๋๋ฐ,
dict[key] = nil
๋ก ํ ๋น์ ํด์ ํ ์ ์๊ฒ ํด์ฃผ๊ธฐ ์ํด์์ด๋ค.
3. ์ต์
-
์ ๋ ฅ ํ๋ผ๋ฏธํฐ
- ์ฌ๋ฌ๊ฐ์ผ ์ ์์
- ํ์ ์ ์๊ด ์์
- ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง ์ ์์.
- inout ์ธ์๋ ์๋จ.
-
๋ฐํ๋ ์ญ์ ์ด๋ค ํ์ ์ด๋ ๊ฐ๋ฅ.
-
์ค๋ฒ๋ก๋ฉ ( ์ธ์ํ, ๋ฐํํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ทจ๊ธ๋จ. == ๋ง์๋๋ก ์ธ์์ ๋ฐํ๊ฐ์ ๋ฃ์ด์ ๊ตฌํ ) ๊ฐ๋ฅ.
struct Matrix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(repeating: 0.0, count: rows * columns)
}
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row: Int, column: Int) -> Double {
get {
assert(indexIsValid(row: row, column: column), "Index out of range")
return grid[(row * columns) + column]
}
set {
assert(indexIsValid(row: row, column: column), "Index out of range")
grid[(row * columns) + column] = newValue
}
}
}
์ด๋ฐ์์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
grid[0, 1] // 0ํ 1์ด
4. Type Subscript
- ํ์ ์์ฒด์์ ํธ์ถ๋๋ subscript
- static ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ.
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
static subscript(n: Int) -> Planet {
return Planet(rawValue: n)!
}
}
let mars = Planet[4]
print(mars) // 4
์ง๋ฌธ
Subscripts์ ๋ํด ์ค๋ช ํ์์ค.
- subscript ๋ ๋ฐฐ์ด์ ์์๋ ๋์
๋๋ฆฌ์ ์์์ ์ ๊ทผํ๋ ๊ฒ ์ฒ๋ผ
arr[1]
๊ณผ ๊ฐ์ ์ฝ๋ ์ ํ์ ์ ๋ฌธ๋ฒ์ผ๋ก enum, struct, class ์ ์ธ์คํด์ค ๋ด ์์์ ์ฝ๊ฒ ์ ๊ทผํ๊ณ ์์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฌธ๋ฒ์ด๋ค. - getter, setter ๊ตฌํ์ด ๊ฐ๋ฅํด์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์๋, ์ค์ ํ ์๋ ์๋ค.
- nil ์ set ํ๋ฉด ํ ๋น์ด ํด์ ๋๋ค.
- ์
๋ ฅ ํ๋ผ๋ฏธํฐ๋ ์ฌ๋ฌ ํ์
, ์ฌ๋ฌ ๊ฐ ์ผ ์ ์๊ณ , ๋ฐํ ๊ฐ๋ ์ฌ๋ฌ ํ์
์ผ ์ ์๋ค.
- ์ ๋ ฅ ํ๋ผ๋ฏธํฐ๋ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ง ์ ์๊ณ , inout ์ธ์๋ ์๋จ.
- ์ ๋ ฅ๊ฐ, ์ถ๋ ฅ๊ฐ์ ๊ฐ์์ ํ์ ๋ฑ์ผ๋ก ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ์์ ๋กญ๊ฒ ๊ตฌํํ ์ ์๋ค.
String์ ์ subscript๋ก ์ ๊ทผ์ด ์๋๋์ง ์ค๋ช ํ์์ค.
- ๊ทธ๋ฌ๋ค..?
- ๋ค๋ฅธ ์ธ์ด์์๋ Subscript ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, Swift ์์๋ Index ๋ก ์ ๊ทผํ๋ค.
Why..?
- Swift ๋ ์ฌ๋ฌ ์ ๋์ฝ๋๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด๋ ์ทจ๊ธํ๋ค. ์๋ฅผ ๋ค์ด,, ์ด๋ชจ์ง ๐ซฃ๐ซ ๐ซฅ
- ๐โโฌ : ์์ ๊ฒ์ ๊ณ ์์ด ๊ฐ์ ๊ฒฝ์ฐ ๐โฌ๏ธ๋ ์ด๋ชจํฐ์ฝ์ ํฉ์ด๋ค. ํ๋์ ๋ฌธ์์ด์ง๋ง ์ฌ๋ฌ๊ฐ์ UnicodeScalar๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒ. ์ด๋ ๊ฒ String ์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๊ณ ์ฌ๋ฌ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋ฐ๋ผ์๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, Subscript๋ก ์ ๊ทผํ ์๊ฐ ์๋ค.
๊ทธ๋ผ ์ฝํ
๋ ์ด๋ป๊ฒ ๋ณด๋์.. Index์ ์ต์ํด์ ธ์ผ ํ๋..? ์ฌ์ค ํ์ด์ฌ์ผ๋ก ๋ณผ๊ฑฐ์
- Index ์ฐพ๋ ๊ฒ์ด
O(n)
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ฝํ ํ๊ธฐ์ ๋ถ์ ํฉ. Array(str)
๋ก Character ํ์ ์ ๋ฐฐ์ด๋ก ๋ณํํด์ ์ฌ์ฉํ์!!!
์ถ์ฒ
https://bbiguduk.gitbook.io/swift/language-guide-1/initialization
https://jcsoohwancho.github.io/2019-11-19-Swift-String-ํจ์จ์ ์ผ๋ก-์ฐ๊ธฐ/
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Swift๐ฆฉ] #12 ์๋ธ์คํฌ๋ฆฝํธ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@ddosang/Swift-12-์๋ธ์คํฌ๋ฆฝํธ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค