ํฐ์คํ ๋ฆฌ ๋ทฐ
[swift] final, static, class ( + ์ธ์คํด์ค ๋ฉ์๋, ํ์ ํ๋กํผํฐ )
ggasoon2 2021. 4. 5. 23:01final ์ฐ๋ ์ด์ !
static ์ฐ๋ ์ด์ ! class์ ์ฐจ์ด
ํญ์ ์ ๋งคํ๊ฒ ํ๋ ๊ฒ๋ค.. ํ๋ฒ ์ ๋ฆฌํ๋ ๊ฒ ์ข๊ฒ ๋ค ์ถ์ด์ ๊ธ์ ์๋๋ค.
๊ธ์ด ๋๋ฌด ๊ธฐ๋๊น ๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆด๊ฒ์.
1. final ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐฉ์งํ๊ธฐ ์ํจ.
2. static๊ณผ class์ ์ฐ์์ ๋ฉ์๋์ ํ๋กํผํฐ๋ฅผ ์ธ์คํด์คํ ํ์ง ์๊ณ ํ๋๋ง ์กด์ฌํ๋๋ก ํ๊ธฐ ์ํด ์ฌ์ฉ.
-> ํ์ ๋ฉ์๋, ํ์ ํ๋กํผํฐ๊ฐ ๋จ, ์ฐจ์ด๋ static์ ์์์ด ๋ถ๊ฐํ๋ค๋์ .
์์ฝ์ ๋ณด๊ณ ๋ช ํํ๊ฒ ์ดํด๊ฐ ์๊ฐ์ ๋ค๋ฉด (์ ๋ ์ดํด๊ฐ ์๊ฐ์ ์ฐพ์๋ณด๊ณ ์ ๋ฆฌํจ)
๋ท๋ฐ์นจ๋๋ ๋ด์ฉ๊น์ง ์์ธํ๊ฒ ์ ๋ฆฌํ์ผ๋,
๋ค ์ฝ์ด๋ณด์ ๋ค๋ฉด ์ดํด๋์๋ฆฌ๋ผ ์๊ฐํด์.
์ฐ์ ์ฒซ๋ฒ์งธ, final ์ Overriding์ ๋ง๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
Overriding ์ด๋?
๋ถ๋ชจ ํด๋์ค๋ก๋ถํฐ ์์๋ ์๋ธํด๋์ค์์
1. ์ธ์คํด์ค ๋ฉ์๋, 2. ํ์ ๋ฉ์๋, 3. ์ธ์คํด์ค ํ๋กํผํฐ, 4. ํ์ ํ๋กํผํฐ ๋๋ 5. ์๋ธ ์คํฌ๋ฆฝํธ
์ ๋ํ์ฌ ์ฌ์ ์ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
(Overloading์ ๋ํด์๋ ์ค๋ช ํ ๊ฒ์.)
์ฌ์ ์๋ ๋ถ๋ชจ์ ํจ์๋ฅผ ์์ ํด๋์ค์์ Override ๋ผ๋ ํค์๋๋ฅผ ๋ถ์ฌ ๊ธฐ๋ฅ์ ์๋ก ๊ตฌํํ๋ ๊ฒ์ ๋๋ค..
๋ง์ฝ ์ฌ์ ์ํ์ง ์๊ณ ๋ถ๋ชจ์ ํจ์ ๊ตฌํ์ ๋ฐ๋ฅด๊ณ ์ถ์ผ๋ฉด
override func ํจ์์ด๋ฆ() {
super.ํจ์์ด๋ฆ()
}
์ด๋ ๊ฒ super์ ๋ถ์ฌ์ฃผ๋ฉด ๋จ.
๊ทธ๋ฌ๋๊น final ์ ์์๋๋ ํด๋์ค์์ ๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ ์ํ์ง ๋ชปํ๋๋ก ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋ผ์!
(static์ ์ฐ์๊ณผ class์์ ์ฐจ์ด๋ 2. ํ์ ๋ฉ์๋์ 4. ํ์ ํ๋กํผํฐ์์ ์ค๋ช ์ค..)
๋ฉ์๋๊ฐ ๋จธ๊ณ ํ๋กํผํฐ๊ฐ ๋ญ๋ฐ..
-> ๋ฉ์๋๋ ํจ์์ด๊ณ ํ๋กํผํฐ๋ ์์ฑ์ ๋๋ค.
๊ฐ๋จํ๊ฒ
car๋ผ๋ class์ stop๋ผ๋ ๊ธฐ๋ฅ์ ํ๋ func(๋ฉ์๋)๊ฐ ์๋ ๊ฑฐ๊ณ ,
car์ ํ๋กํผํฐ๋ก๋ car์ ์ผ๋ จ๋ฒํธ๋ผ๋ ์์ฑ์ด ์์ ์ ์๊ฒ ์ฃ ?
์ธ์คํด์ค ๋ฉ์๋, ํ์ ๋ฉ์๋, ์ธ์คํด์ค ํ๋กํผํฐ, ํ์ ํ๋กํผํฐ๊ฐ ๋ญ์ง
์ด๋ค ํน์ฑ์ด ์๋์ง ์ถ๊ฐ ์ค๋ช ํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์์ (์๋ฌด ํค์๋๋ ์ ๋ถ์) ํจ์๋ก
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ์ธ์คํด์คํ๊ฐ ํ์ํ ํจ์์ ๋๋ค.
์ธ์คํด์ค ๋ฉ์๋๋ ์ฌ์ฉํ๋ ค๋ฉด ์ธ์คํด์คํ๊ฐ ํ์ํ๋ค๊ณ ํ์ฃ ?
Car๋ผ๋ ํด๋์ค๋ฅผ ์ธ์คํด์คํ ํ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
๋ฐ๋ก stop()์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์!!!!!!!
์ธ์คํด์คํ๋ ํด๋์ค๋ฅผ ์ธ์คํด์ค(๊ฐ์ฒด)๋ก ๋ง๋ค์ด์ฃผ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
-> let appleCar = Car() // Car ํด๋์ค๋ฅผ ๊ฐ์ฒด๋ก ํ ๋น. (์ธ์คํด์คํ)
์ธ์คํด์ค ๋ฉ์๋๋ Car๋ผ๋ ํด๋์ค ํ์ ๊ฐ์ฒด์ธ appleCar ๋ง๊ณ ๋ ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค(๊ฐ์ฒด)๋ฅผ ๋ง๋ค ์ ์๊ฒ ์ฃ ?
(๊ทธ๋์ ์ด๋ฆ์ด ์ธ์คํด์ค ๋ฉ์๋!!)
Overriding๋ ์ด๋ฐ ์ธ์คํด์ค ๋ฉ์๋(class์ ์ํ๋ func๋ง ์์ ๊ฐ๋ฅ. ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ์์ ์๋๋๊น..)๋ฅผ
์ฌ์ ์ํด์ ์ด๋ค~๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๊ฑธ ๋ฐฉ์งํ๋ ๊ฒ final์ด๊ณ ์.
๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค ๋ฉ์๋๋ ์ธ์คํด์ค ๋ด์ ๊ฐ์ ์ ์ดํ๊ฑฐ๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
let counter = Counter() // ์ธ์คํด์คํ
counter.increment() // count = 1
counter.increment(by: 5) // count = 6
counter.reset() // count = 0
์ด๋ ๊ฒ ๋ง์ด์ฃ ..
๊ทผ๋ฐ ์์ธ๊ฐ ์์ด์
๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ๊ฐ ํ์ ์ด๋ผ ์ธ์คํด์ค ๋ฉ์๋๋ก ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ์๊ฐ ์์ต๋๋ค.
ํ์ง๋ง ๋ฉ์๋์ mutating์ ๋ถ์ฌ ์ฃผ๋ฉด ๊ฐ๋ฅํ๋ค๊ณ ํด์!!
์ด๋ ๊ฒ ๋ง์ด์ฃ !
์ด๋ ๊ฒ ํ๋ ์ด์ .
class๋ ์ฐธ์กฐ ํ์ . struct๋ ๊ฐ ํ์ ์ ๋๋ค.
๊ฐํ์ ์ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ฐ mutating์ผ๋ก ์ด๋ฅผ ํด๊ฒฐ ๊ฐ๋ฅํฉ๋๋ค.
์ ๊ฐํ์ ์ ์ธ์คํด์ค ๋ฉ์๋๋ด์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋?
์ด๋ ๊ฐํ์ ์ด COW (copy - on - write)๋ก ์์ฑ ์์ ์ ๋ณต์ฌ๊ฐ ์๋๋ผ ์ธ ๋ ๋ณต์ฌ๊ฐ ๋๋ ํน์ฑ ๋๋ฌธ์ ๋๋ค!
์ฆ, ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ด์ ๋
์ ์ธ ์์ ์ด๋ ์์ฑ ๋๊ฐ ์๋๋ผ ์ธ(์ฌ์ฉ์์ ) ๋ ๊ฐ์ด ๋ณต์ฌ๊ฐ ๋จ์ผ๋ก,
์์ฑํ ๋ ๊ฐ์ด ๋ฐ๋์ด ์ ์ฅ๋ ์ ์์ด์.
๊ทธ๋์
mutating์ ๋ช ์ ํจ์ผ๋ก์จ mutating ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ๋ ๊ณ์ฐ๋ ๊ฐ๋ค์
์๋ณธ ๊ตฌ์กฐ์ฒด struct์ ๋ฎ์ด ์จ์ ๋ณ๊ฒฝ ํ๋๋ก ํด์ค๋๋ค.
(https://docs.swift.org/swift-book/LanguageGuide/Methods.html ๊ณต์๋ฌธ์์ mutating๋ถ๋ถ์ ์ฐธ๊ณ ํจ)
(ํ์ค์ ๋ฆฌ) ์ธ์คํด์ค ๋ฉ์๋์ ๋ค๋ฅด๊ฒ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ฅผ ์๋ฏธํด์.
์ด๋ป๊ฒ ๋ฐ๋ก ์ฐ๋.
func ์์ ํค์๋ class๋, static์ ๋ถ์ฌ์ ์ธ์คํด์คํ ์์ด ๋ฐ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค!!
์ ํจ์ ์์ ํด๋์ค๋ฅผ ๋ถ์ฌ?? ํด๋์ค๋ ํด๋์ค๊ณ , ํจ์๋ ํจ์์ง.. ํ์ค ์๋ ์์ผ์ ๋ฐ (์ ๋ ๊ทธ๋ผ^^)
Hello ์์ class๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก์จ ๊ฐ์ฒด๋ฅผ ๋์์ธํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ class์ด๊ณ ,
func์์ class๋ ํ์ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํค์๋๋ผ๊ณ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.. (๊ตฌ๋ถ์ด ์ข ๋์๋์?)
static๊ณผ class์ ์ฐจ์ด ๋ณด์ด์๋์?
class์ ์ํ func๋ ํค์๋ class, static ๋ ๋ค ์ฌ์ฉ ๊ฐ๋ฅ
๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ์ํ func๋ static ๋ง ์ฌ์ฉ!!
์ฌ๊ธฐ์ ๋งจ ์์ ๋๋ฒ์งธ ๊ถ๊ธํ๋ static์ ์ฐ๋ ์ด์ ์ class์ ์ฐจ์ด์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ๋ค์.
static๊ณผ class์ ์ฐจ์ด์ ์ static ์ override ๋ถ๊ฐ๋ฅ! class๋ ๊ฐ๋ฅ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์๊น ์์์ final์ override๋ฅผ ๋ง๋๋ค๊ณ ํ๋๋ฐ.. final class func ๋์ static func๋ฅผ ์ฐ๋ฉด ์ฌ์ ์๋ฅผ ํ์ง ์๋ ํ์ ๋ฉ์๋๋ก ์ฌ์ฉํ ์ ์๋ ๊ฑด๊ฐ์? -> ์ ๋ต์ ๋๋ค.
์ ๋ฆฌ) ์ฐ๋ ์ด์
static๊ณผ class ๋๋ค func(๋ฉ์๋) ์์ ๋ถ์์ ๋,
func๋ฅผ ์ธ์คํด์คํ ํ์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ด์์ต๋๋ค~
(ํ์ ๋ฉ์๋๋ก ์ฐ๊ฒ ๋ค๋ ํค์๋)
ํ์ ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก ํ๋๋ง ์กด์ฌํ๋ฉฐ,
๋ฐ๋ก ์ฒ๋ฆฌํ๊ณ ๋๋ด๋ ํจ์์ ์ฐ์ด๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ๋ฆฌํด๊ณผ ์ ์ด์ธ๋ฆฌ๋ ํจ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐ์์ด ๋ ๊ถ๊ธํ์ ๋ถ์ docs.swift.org/swift-book/LanguageGuide/Methods.html ์
Type Methods ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด์ธ์!
๋ค๋ฅธ ํด๋์ค์ ์ธ์คํด์ค ํจ์ ์์์ ์ฒ๋ฆฌํด์ผ ํ ์์ ์ ์ํํ๋ ํจ์๋ก ์ฐ์ด๊ธฐ๋ ํ๋ค์.
3. ์ธ์คํด์ค ํ๋กํผํฐ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ธ์คํด์ค ํ๋กํผํฐ๋ ํน์ ์ธ์คํด์ค์ ์ํ๋ ๊ทธ๋ฅ just ์ผ๋ฐ(์ ์ฅ, ์ฐ์ฐ) ํ๋กํผํฐ๋ฅผ ๋งํด์.
์ธ์คํด์ค ํ๋กํผํฐ์ ํน์ง์ผ๋ก๋ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ์๋ก์ด ํ๋กํผํฐ๋ ๊ฐ์ด ์์ฑ์ ํฉ๋๋ค.
์ดํด๊ฐ ์๊ฐ์ ๋ค๋ฉด ๋ฐ์ ์ฝ์ด์ฃผ์ธ์ฉ!
์ฐ์ ํ๋กํผํฐ๊ฐ ๋ฌด์์ธ์ง ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
ํ๋กํผํฐ๋ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ์ํ ๊ฐ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋กํผํฐ์ 2๊ฐ์ง ์ ํ์ด ์์ต๋๋ค.
์ ์ฅ ํ๋กํผํฐ(Stored Properties), ์ฐ์ฐ ํ๋กํผํฐ(Computed Properties).
์ฒซ๋ฒ์งธ, ์ ์ฅ ํ๋กํผํฐ๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ ์ ์ฅํ๋ ํ๋กํผํฐ์ ๋๋ค.
(์๋ฅผ ๋ค๋ฉด var๋ let ๊ฐ์ ๋ณ์, ์์๊ฐ ๋ ์ ์๊ฒ ์ฃ ?)
ํด๋์ค์ ๊ตฌ์กฐ์ฒด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํด์. (์ด๊ฑฐํ์์ ๋ถ๊ฐ)
๊ทธ๋ฆฌ๊ณ ์ ์ฅ ํ๋กํผํฐ์๋ ์ง์ฐ ์ ์ฅ ํ๋กํผํฐ(Lazy Stored Properties)๋ผ๋ ๊ฒ ์์ต๋๋ค.
์ง์ฐ ์ ์ฅ ํ๋กํผํฐ๋ ๊ฐ์ด ์ฌ์ฉ๋๊ธฐ ์ ๊น์ง๋ ์ ์ธ์ ํ์ง ์๋ ํ๋กํผํฐ์ ๋๋ค.
๊ทธ๋ฌ๋๊น ๋ฆ์ ์ ์ธ.. ๋ณ์ ์์ lazy var ๋ผ๊ณ ํด๋๋ฉด ๊ทธ ๋ณ์๊ฐ ์ฌ์ฉ๋๊ธฐ ์ ๊น์ง ์ ์ธ๋์ง ์์์.
(let์ ์์์ด๋ฏ๋ก lazy๋ฅผ ๋ถ์ผ ์ ์์ด์)
ํน์ ์์์ ์์กด์ ์ด์ด์ ๊ทธ ์์๊ฐ ๋๋๊ธฐ ์ ์ ์ ์ ํ ๊ฐ์ ์์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋,
๋ณต์กํ ์ฐ์ฐ์ผ ๊ฒฝ์ฐ, ์ฌ์ฉ๋๊ธฐ ์ ๊น์ง ์ ์ธํ์ง ์์์ผ๋ก์จ ์ธ์คํด์ค์ ์ด๊ธฐํ ์์ ์ ์๊ฐ์ ์ค์ด๊ณ ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ถ๊ฐ๋ก ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ ์ํ๋ฉด ํ๋กํผํฐ์ ๊ฐ์ด ๋ณํ ๋๋ง๋ค ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
(๋จ, Lazy var ํ๋กํผํฐ์๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ)
ํ๋กํผํฐ ์ต์ ๋ฒ๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
willSet : ๊ฐ์ด ์ ์ฅ๋๊ธฐ ๋ฐ๋ก ์ง์ ์ ํธ์ถ๋จ
didSet : ์ ๊ฐ์ด ์ ์ฅ๋๊ณ ๋ ์งํ์ ํธ์ถ ๋จ
totalApples๋ผ๋ ๋ณ์์ ํด๋ก์ ๋ก willSet๊ณผ didSet์ด๋ผ๋ ํ๋กํผํฐ ์ต์๋ฒ๊ฐ ๋ค์ด๊ฐ ์๋ ๋ชจ์ต.
๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค willSet๊ณผ didSet์ด ์ํ๋ฉ๋๋ค.
(willSet์์๋ ์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ช ์ ์ง์ ํ ์ ์๋๋ฐ, ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก newValue๋ฅผ ์ฌ์ฉํฉ๋๋ค.
didSet์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ผ๋ฏธํฐ๋ช ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก oldValue๋ฅผ ์ฌ์ฉํฉ๋๋ค.)
๋๋ฒ์งธ. ์ฐ์ฐ ํ๋กํผํฐ๋ ๊ฐ์ ์ ์ฅํ์ง ์๊ณ , ๊ณ์ฐํ ๊ฐ์ ๋ฆฌํดํด ์ฃผ๋ ํ๋กํผํฐ์ ๋๋ค.
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋ชจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํด์.
(๊ทธ๋ฌ๋๊น ์ด๊ฑฐํ์์๋ ์ฐ์ฐ ํ๋กํผํฐ๋ง ์ธ ์ ์๋ค๋ ๋ป)
์ ํ ์ค์ํํธ ์ธ์ด ๊ฐ์ด๋์ ์ฐ์ฐ ํ๋กํผํฐ ์์ ๋ฅผ ๋ณด๊ณ ๊ฐ๊ฒ ์ต๋๋ค.
์ฌ๊ฐํ์ ์ขํ์ ํฌ๊ธฐ๋ฅผ ๊ตฌ์กฐ์ฒด๋ก ํํํ๋ ์ฝ๋์ ๋๋ค.
Rect๋ผ๋ ๊ตฌ์กฐ์ฒด๋ Center๋ผ๋ ์ค์ ํํํ๋ ์ฐ์ฐ ํ๋กํผํฐ๊ฐ ์์ต๋๋ค.
center์ ๊ฐ์ ์ ํ๊ธฐ๋ ํ๊ณ (setter), return์ผ๋ก origin(์์ )์ ์ขํ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ๋(getter) ํด์.
center์ขํ๋ฅผ 15,15๋ก ์ง์ ํด์ฃผ๊ณ . square.origin.x, square.origin.y ๋ก ์ฌ๊ฐํ์ ์์ ์ get ํด์จ ๋ชจ์ต
์ด๋ ๊ฒ center์ขํ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ์ฐ์ฐ ํ๋กํผํฐ์ ๋๋ค.
let initialSquareCenter๋ฅผ ์์ ์์๋ ์ ์ธ๋ง ํด์ฃผ๊ณ ๋ฐ๋ก ์ฌ์ฉํ์ง๋ ์์์ด์.
let initialSquareCenter๋ ๋ง ๊ทธ๋๋ก square์ ์ด๊ธฐ ์ผํฐ์ ์ ๊ฐ Point(x:~,y:~)๋ฅผ ์ ์ฅํ๋ ์์์ ๋๋ค.
์ ์ธํ ๊น์ ์ถ๋ ฅ๋ ํด๋ณผ๊ฒ์ใ ใ
print(initialSquareCenter.x, initialSquareCenter.y) ํ๋ฉด ์ด๊ธฐ์ ์ผํฐ ๊ฐ์ธ 5,5๊ฐ ์ถ๋ ฅ๋๊ฒ ์ฃ ?
(์์ํ๋ 5,5๊ฐ ์ ์ถ๋ ฅ๋๋ ๋ชจ์ต!)
๋ํ ์ฐ์ฐ ํ๋กํผํฐ์ setter๋ ์๋ต์ด ๊ฐ๋ฅํฉ๋๋ค.!!
์๋ต ์์ ๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
์ง์ก๋ฉด์ฒด ๋ถํผ๋ฅผ ๊ตฌ์กฐ์ฒด๋ก ํํํ๋ ์ฝ๋์ ๋๋ค.
setter๋ฅผ ์ด๋ป๊ฒ ์๋ตํ๋..
setter ๋์ ๊ตฌ์กฐ์ฒด ์์ ๋ถํผ๋ฅผ ๊ตฌํ๋๋ฐ ํ์ํ 3๊ฐ์ง๋ฅผ ์ธ์คํด์ค ํ๋กํผํฐ(๊ฐ๋ค์ ์ ๋ก)๋ก ์ด๊ธฐํํด๋๋ค์.
๊ทธ๋ฆฌ๊ณ ๊ทธ 3์์์ ๊ณฑ์ ๋ฆฌํดํ๋ ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์์ ์์ฑํด๋์ด์.
๊ทธ๋์ .volume ์ผ๋ก get ํ๋ ๋ชจ์ต! (setter๋ ์๋ต๋ ์ฐ์ฐ ํ๋กํผํฐ)
๋ ์ฐ์ฐ ํ๋กํผํฐ๋ setter๋ผ๋ ๊ฐ ๋ณํ๋ฅผ ๊ฐ์งํ๋ ์ฐ์ฐ์๊ฐ ์์ผ๋ฏ๋ก
๋ฐ๋ก ์ต์ ๋ฒ๋ฅผ ์ ์ํ ํ์๊ฐ ์์ด์.
๋ ๊ฐ์ง์ ํ๋กํผํฐ ์ดํดํ์ จ์ผ๋ฆฌ๋ผ ์๊ฐํ๊ณ
๋ณธ๋ก ์ผ๋ก ๋์๊ฐ์.
๊ณ ๋ก
์ธ์คํด์ค ํ๋กํผํฐ!! ๋
ํน์ ์ธ์คํด์ค์ ์ํ๋ ๊ทธ๋ฅ just ์ผ๋ฐ(์ ์ฅ, ์ฐ์ฐ) ํ๋กํผํฐ๋ฅผ ๋งํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค ํ๋กํผํฐ์ ํน์ง์ผ๋ก๋ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค
์๋ก์ด ํ๋กํผํฐ๋ ๊ฐ์ด ์์ฑ์ ํฉ๋๋ค.
์์ ์ผ์๋ ๋ง์ธ๋ฐ ์ด์ ์ดํด๊ฐ ๊ฐ์์ฃ ??
ํ์ ํ๋กํผํฐ๋ ๋จ ํ๋์ ํ๋กํผํฐ๋ง์ ์์ฑํ๋ ํ๋กํผํฐ๋ฅผ ๋งํด์.
๊ทธ๋์ ๋ชจ๋ ์ธ์คํด์ค์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ ์ ์ํ ๋ ์ ์ฉํฉ๋๋ค.
์์ 2๋ฒ์์ func ์์ static์ด๋ class๊ฐ ๋ถ์ผ๋ฉด ํ์ ๋ฉ์๋๋ผ๊ณ ํ์์ฃ ?
ํ๋กํผํฐ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋กํผํฐ ์์ static์ด๋ class๋ฅผ ๋ถ์ด๋ฉด ํ์ ํ๋กํผํฐ๊ฐ ๋ฉ๋๋ค.
๋ classํค์๋๋ง Overriding ๋ผ์.
์์ ๋ฅผ ๋ณด์ค๊ฒ์!
static์ด ๋ถ์ ํ์ ํ๋กํผํฐ๋ ์ธ์คํด์คํ ์์ด ์จ์. ๊ทธ๋์ ๋ฐ๋ก ๊ตฌ์กฐ์ฒด Apple ๋ท storedTypeProperty ๋ก ์ฐ๋ ๋ชจ์ต.
์ ์ฅ ํ๋กํผํฐ์ ๊ฐ์ BBBBB๋ก๋ ๋ฐ๊ฟ์ง๋๋ค!!
์ด๊ฑฐ ์ข ํํธ๋ค์. (์์ ๋ ๊ตฌ์กฐ์ฒด์ธ๋ฐ class์์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ, enum์ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ํ์ฉ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด static ์ ๋ถ์ฌ์ผํจ.)
์ฐ์ฐ ํ๋กํผํฐ์ ๊ฐ์ setํ์ง ๋ชปํ๋ ๋ชจ์ต์ ๋๋ค. (setter๊ฐ ์์์ผ๋ฉด ์ ์ฅ๋๊ฒ ์ฃ ?)
์๋ธ ์คํฌ๋ฆฝํธ๋ ์ฝ๋ ์ , ๋ฆฌ์คํธ, ์ํ์ค ๋ฑ์ ์์์ ๊ฐ๋จํ๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค.
์ถ๊ฐ์ ์ธ ๋ฉ์๋ ์์ด ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ์ฅํ ์ ์๋ค๊ณ ํฉ๋๋ค.
(๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ ์ฅํ๋ค๋, ํ๋กํผํฐ๋ ๋น์ทํ๋ค์?)
์๋ธ ์คํฌ๋ฆฝํธ์๋ getter์ setter๊ฐ ์๋๋ฐ getter๋ ์๋ต ๊ฐ๋ฅํฉ๋๋ค.
(์ฐ์ฐ ํ๋กํผํฐ๋ setter๊ฐ optional์ด์๋๋ฐ ์๋ธ ์คํฌ๋ฆฝํธ๋ getter๊ฐ optional์ธ ๋ชจ์ต)
์ ์๋ ๊ณ์ฐ๋ ํ๋กํผํฐ ๋ฐฉ์๊ณผ ๊ฐ์ด setter, getter ๋ฐฉ์์ ๋ฐ๋ฆ ๋๋ค.
subscript(index: Int) -> Int {
get { // optional
// ์ ์ ํ return ๊ฐ
}
set(newValue) {
// ์ ์ ํ set ์ก์
}
}
์ด๋ฐ ๊ตฌ์กฐ ํํ์ด๊ณ ์ด๋ป๊ฒ ์ฐ๋์ง ์์ ๋ก ํ์ธํ๊ฒ ์ต๋๋ค.
Getter๊ฐ ์๋ต๋ ์๋ธ ์คํฌ๋ฆฝํธ์ ์์ ์ ๋๋ค.
TimesTable์ ์ ์์ n๋ฐฐ๋ฅผ ํํํ๋ ๊ตฌ์กฐ์ฒด์ ๋๋ค.
๋ณด์๋ฉด ๋ฐฐ์ด์ ๋ง๋ค์ง๋ ์์๋๋ฐ threeTimesTable[6]์ด๋ผ๋ ์์๋ฅผ ๊ฐ์ ธ์ค๊ณ ์์ฃ ?
Setter์ ์๋ธ ์คํฌ๋ฆฝํธ๊ฐ threeTimesTable[6] ๋ผ๊ณ ํ์ ๋ ๋ฐ๋ก ๋ด๋ถ์์ ๋๋ฑ ๋ง๋ค์ด ๋ฒ๋ฆฌ๋ ๊ฑฐ์ฃ ..
๊ฐ๋จํ๊ฒ ์ถ๊ฐ์ ์ธ ๋ฉ์๋ ์์ด ํ ๋น, ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ ๋ฐ๋ก ์ด๊ฒ๋๋ค. (์ ๊ธฐํ๋ค์ subcript ์ฒ์ ๋ด)
์๋ธ ์คํฌ๋ฆฝํธ ์ดํด ์ ๋์ จ๊ธธ..!!
์ฌํ Class ์์ ์ Overriding์ด ๊ฐ๋ฅํ 5๊ฐ์ง ๊ฒ๋ค์ ์์๋ดค์ต๋๋ค. (์ฝ์ง ์์์ต๋๋คใ )
Overloading์ ๋ํด์๋ ์์๋ด์ผ๊ฒ ์ฃ ?
๊ทธ๋ผ, Overloading์ด๋
๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ถ๊ฐ๋ก ๋ง๋๋๋ฐ, ํ๋ผ๋ฏธํฐ ์ ํ์ ๋ฌ๋ฆฌ ํ์ฌ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋๋ก ํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
Overriding๊ณผ์ ์ฐจ์ด๋ฅผ ๋ณด์๋ฉด.
Overriding๊ณผ ๋ค๋ฅด๊ฒ ์์๊ณผ๋ ๊ด๊ณ๊ฐ ์์ด์.
Overriding๋ ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ์ ๊ฒ์ ๋ค๋ฅด๊ฒ ๋ง๋ ๋ค๋, ๊ฐ์ฒด์งํฅ์ ์์์ฑ์ ์๋ฏธํ๊ณ
Overloading์ ๊ฐ์ ์ด๋ฆ์ ํจ์๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๋ํ๋๋ก, ๊ฐ์ฒด์งํฅ ๋คํ์ฑ์ ์๋ฏธ๋ฅผ ์ํด ์กด์ฌํฉ๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด.!
1. final ์ฐ๋ ์ด์ => Overriding ์ ํ
2. static๊ณผ class์ ์ฐ์๊ณผ ์ฐจ์ด
์ฐ์ => ์ธ์คํด์คํ ํ์ง ์๊ณ ํ๋๋ง ์กด์ฌํ๋๋ก ํ๊ธฐ์ํจ(ํ์ ๋ฉ์๋, ํ์ ํ๋กํผํฐ)
์ฐจ์ด => static์ ์์ ๋ถ๊ฐ
(๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ธ ๋ด์ฉ๋ค.. ๋๋ฌด ๋ง์์ฃ )
๊ธ๋ก ์ ๋ฆฌํ๋๊น (์ ๋) ์ข ์ดํด๊ฐ ๋๋ค์.
์ต๋ํ ์ฐพ์๋ณด์๋ ๋ถ๋ค๋ ์ดํด๊ฐ ์ ๋๊ฒ๋ ์ฐ๋ ค๊ณ ๋ ธ๋ ฅํ๋๋ฐ..
์ข ๋์์ด ๋์ จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค!
- Total
- Today
- Yesterday
- chatgpt rag llm
- swift filemanager excel
- ์๋์ํํธ ๋ ์ด์ธ์ด
- swift urlsession ๊ณตํตํ
- swift urlsession module
- swift urlsession network module
- swift urlsession refactoring
- llm csv
- swift network ๊ณตํตํ
- focus timer ์ดํ
- swift urlcomponent encode
- swift network module
- swift ๋คํธ์ํฌ ๋ชจ๋ํ
- swift filemanager get excel
- swift get excel
- swift ์์ ๊ฐ์ ธ์ค๊ธฐ
- rag ๊ธฐ๋ฐ llm
- swift queryitem encode
- rag llm pdf
- swift ์์ ์ฝ๊ธฐ
- swift network refactoring
- filemanager excel read
- swift ์๊ฐ
- swift excel read
- deep timer
- readysay
- ๋ ๋์ธ์ด ์ดํ
- llm pdf rag
- ๋ ๋์ธ์ด
- rag ๊ธฐ๋ฐ llm ์ฑ๋ด
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |