ํฐ์คํ ๋ฆฌ ๋ทฐ
iOS ์ฑ๊ฐ๋ฐ/WWDC
[WWDC 15] - Protocol Oriented Programming(POP) {1ํธ - ์ OOP๋ก๋ ๋ถ์กฑํ๊ฐ?}
B_log 2021. 5. 20. 13:44๋ฐ์ํ
๐ ํ๋กํ ์ฝ ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ(Protocol-Oriented-Programming in 408 Session WWDC 15)
๐ฏ ํ๋กํ ์ฝ ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ(์ดํ POP) {1ํธ - ์ OOP(Object Oriented Programming)์ผ๋ก๋ ๋ถ์กฑํ๊ฐ?}
- 2015๋ WWDC์ POP ์ค๋ช ์์์ ํตํด POP๋ฅผ ์ดํดํด๋ณด๊ฒ ์ต๋๋ค.
- ์์ด ๋๋ฌด ๋ง์ ๊ด๊ณ๋ก ์ฌ๋ฌ ํธ์ ๋๋์ด ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
- WWDC์์๋ Crusty(์ฌ์จ?)๋ผ๋ ์์ ์จ๋ฅผ ๋ฑ์ฅ์์ผ ์ฅ๋จ์ ์ ์ฃผ๊ณ ๋ฐ๋ ํ์์ ๋ฐํ๋ฅผ ์งํํฉ๋๋ค!
๐ Classes are Awesome!
- POP๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํด ๊ธฐ์กด์ ์ฌ์ฉํ๋ OOP์ ๊ฐ๋
์ ํ์ฉ๋์๋ Class์ ์ฅ์ ์ ๋จผ์ ์ค๋ช
ํฉ๋๋ค.
- Encapsulation(์บก์ํ): ๊ด๋ จ ๋ฐ์ดํฐ์ ๋์๋ค์ ๋ชจ์๋ ์ ์์ต๋๋ค.
- Access Control(์ ๊ทผ์ ์ด): ์ฝ๋ ์ธ๋ถ์ ๋ด๋ถ๋ฅผ ๊ตฌ๋ถ์ง๋ ๋ฒฝ์ ์ธ์ ์ธ๋ถ์์์ ์ ๊ทผ์ ์ ํ์ ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ๋ณด์ ๋ํ ๋ถ๋ณ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- Abstraction(์ถ์ํ): ์ถ์ํ๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ๊ด๋ จ์ํฌ ์ ์๋(relatable) ์ ๋ณด๋ค์ ๋ํํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ๊ฒ ๋งํด ๊ตฌ์ฒดํ ๋์ด ์๋ ์ ๋ณด๋ฅผ ์ถ์ํํจ์ผ๋ก์จ ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ค๊ฐ์ ๊ณตํต์ ์ ํ๋์ ํด๋์ค๋ก ํํํ ์ ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
- NameSpace: ์ํํธ์จ์ด๊ฐ ์ปค์ง๋ฉด์ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ๋๋นํ๋๋ฐ ๋์์ ์ฃผ๋ ์ด๋ฆ ๊ณต๊ฐ(Name Space)๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Name Space: ๋ด๋ถ ์๋ณ์์ ์ฌ์ฉ๋ ์ ์๋ ์ ํจ ๋ฒ์๋ฅผ ์ ๊ณตํ๋ ์ ์ธ์ ์์ญ์ ์๋ฏธํฉ๋๋ค.
- ์ถ์ฒ: TCPSchool
- Expressive Syntax: Expressive๋ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ฝ๋ค๊ณ ์ดํดํ ์ ์์ต๋๋ค. ์ฆ, ํด๋์ค๋ฅผ ํตํด ํ๋กํผํฐ, ๋ฉ์๋ ๋ฑ์ ํ๋ฆ์ผ๋ก ์ดํดํ๊ธฐ ์ฌ์ด ๊ตฌ๋ฌธ์ ์์ฑํ ์ ์์ต๋๋ค.
- Extensibility(ํ์ฅ์ฑ): ๋๊ตฐ๊ฐ๊ฐ ์์ฑํด๋์ ์ฝ๋์ ์ธ์ ๋ ์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ํ์ง๋ง Crusty๋ ์์ ๋ชจ๋ ๊ฒ์ struct์ enum์ ํตํด์ ํ ์ ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.. ์ด ๋ง ๋๋ฌธ์ ๋ฐํ์(์ดํ Dave)๋์ด๋ผ๋ ์ฌ๋ฏธ์๋ ํํ์ ์ผ๋ค์ ใ
ใ
์ฌ๊ธฐ์ Dave๋ ๋ฐ๊ฒฉ์ ์ํด์ OOP๋ก ์ด๋ฃฌ ์๋ง์ ์
์ ์ค์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ๋ฐฉ์ ์ค๋นํฉ๋๋ค. ํด๋์ค๋ก๋ง ํ ์ ์๋ ์์ ๊ฐ์ ๊ฒ ๋ง์ด์ฃ .๊ฑฐ๊ธฐ์ ๋ํด ์ง์ง ์ฅ์ ์ ์๋์ ๋ฌธ์ฅ์์ ํํํฉ๋๋ค.ํด์ํด๋ณด๋ฉด OOP์ ์ง์ง ๊ฐ์ ์ด ๋์ค๋ ๊ฒ์ ์ํผ ํด๋์ค๋ฅผ ์์ฑํ ๋ ์ด๋ค ์์
์ ์์ ๋ถ๋ถ์ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์(Override)ํ ์ ์๋ Customization point(์ฌ์ฉ์๊ฐ ์ ์ํ ํฌ์ธํธ)๋ก ๋๋๊ณ , ์ด ๋ถ๋ถ์ด ์๋ธํด๋์ค์ ๊ตฌํ์์ ์ค์ฒฉ๋ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ ค์ด ๋ก์ง๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๊ณ ์ ์ฐ์ฑ๊ณผ ๋ค์์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค.
Dave๊ฐ 1์ธ 2์ญ์ ์๋นํ ์ํ์๋ค์.. :)
๋๊ฐ ๋งํ๋ customization์ ๋๋ ํญ์ struct๋ก ํ๊ณ ์์ด, ๊ทธ๋ฆฌ๊ณ class๊ฐ ์ข์๊ฑด ์ธ์ ํ๋๋ฐ ๊ทธ๋ผ ๊ฑฐ๊ธฐ์ ๋ฐ๋ฅธ ๋น์ฉ์ ์๊ธฐํด๋ณผ๊น?
๋ผ๊ณ ํ๋ฉด์ Class์ ๋ํ ๋ถ๋ง 3๊ฐ์ง๋ฅผ ์ด์ผ๊ธฐํฉ๋๋ค.
๐ก ํด๋์ค๋ ์๋ํ๋ ๊ณต์ ๋ฅผ ํ๋ค:์ด๋ค A๊ฐ B์๊ฒ ๊ด์ฐฎ์๋ณด์ด๋ ์ ๋ณด๋ฅผ ์ค ๋ B๋ ๊ทธ ์ ๋ณด๋ฅผ ๋ฐ๊ณ , '๋ํ๊ฐ ๋๋ฌ๊ตฐ'์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ํ๋ ์ ๋ณด๋ฅผ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๋์ด์ ๋ํํ ์ด์ ๊ฐ ์๊ฒ ์ฃ . ํ์ง๋ง ๊ฐ์๊ธฐ ์ด์ํ(?) A๊ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๊ฒ์ ์ง์ณ์ ๋ฐ์ดํฐ๋ฅผ Pony ๋ฐ์ดํฐ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฝ๋๋ค. Pony๋ฅผ ์ฌ๋ํ๊ธฐ ๋๋ฌธ์ ๋๊ฐ Pony ๋ฐ์ดํฐ๋ฅผ ์ซ์ดํ๊ฒ ์ด? ํ๊ณ ๋ง์ด์ฃ . ์ด ์๊ฐ์๋ ์ฌ์ค ์๋ฌด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฌธ์ ๋ B๊ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ค๊ณ ํ ๋ ๋ฐ์ํฉ๋๋ค. ํ์ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๊ณ ๋ดค๋๋ฐ ๊ฐ์๊ธฐ Pony๊ฐ ๋ค์ด์์ผ๋๊น ๋ง์ด์ฃ !์ฌ๊ธฐ์ Crusty๊ฐ ์ถ๊ฐ๋ก ๋ถ๋ง์ ํ ๋กํฉ๋๋ค.
'๋๋ ์ฝ๋์ ์๋ ๋ฒ๊ทธ๋ฅผ ์ ๊ฑฐํ๋ ค๊ณ ๋ง๊ตฌ์ก์ด๋ก ๋ชจ๋ ๊ฒ์ ๋ณต์ฌํ๊ธฐ ์์ํ ๊ฑฐ์ผ. ๊ทผ๋ฐ ๋๋ฌด ๋ง์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ ์ด๊ฑด ์ฝ๋๊ฐ ๋๋ ค์ง๊ฒ ๋ง๋ค๊ฑฐ์ผ. ๊ทธ๋ฆฌ๊ณ ์ด๋๋ ๋๊ฐ dispatch queue๋ก ์ด๋ค ์์ ์ ํ๋ ค๊ณ ํ ๋ ์ฐ๋ ๋๊ฐ mutable state๋ฅผ ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ race condition์ ๋น ์ง ์ ์์ด. ๊ทธ๋ผ ๋ถ๋ณ์ฑ์ ๋ณดํธํ๊ธฐ์ํด lock์ ์ถ๊ฐํ๊ธฐ ์์ํ ๊ฑฐ์ผ. ๊ทธ๋ฐ๋ฐ ์ด lock๋ค์ด ์ฝ๋๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋ค๊ณ ๋ฐ๋๋ฝ์ ์ด๋ํ ์๋ ์์ง. ๊ทธ๋ฆฌ๊ณ ์ด ๋ณต์กํ ์ํฉ์ ํ๋ง๋ "๋ฒ๊ทธ"๋ผ๊ณ ์ ์๋ ๊ฑฐ์ผ.'
์ฌ๊ธฐ์ ๋์ค๋ ์ฉ์ด๋ค์ CS ๊ด๋ จ๋ ๊ฒ์ด ๋ง์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๊ฐ ํ์ํ์ง๋ง ์ด ๊ธ์์๋ ์ถ๊ฐ๋ก ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค! ํน์ ๋ชจ๋ฅด๋ ์ฉ์ด๊ฐ ์๋ค๋ฉด ์ฐพ์๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ํ๊ฐ์ง๋ง ์ค๋ช ํ์๋ฉด mutable state๋ ์์ฑ ํ ๋ณํ ์ ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ๋ฐ๋๋ ๋ถ๋ณ ์ํ๊ฐ ๋๊ฒ ์ฃ ? ์์์ฒ๋ผ ํ๋ฒ ์์ฑํ๋ฉด ๋ณ๊ฒฝํ ์ ์๋ ์ํ์ ๋๋ค.์ ๋ฆฌํ๋ฉด ๊ฒฐ๊ตญ ๋ณํ ์ ์๋ ์ํ๋ฅผ ๋ง์ด ๊ณต์ ํ ์๋ก ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค.
๐ก ํด๋์ค ์์์ ๋๋ฌด ์ฐธ๊ฒฌํ๋ค(class inheritance is too intrusive):
Swift์์ ์์์ ๋จ์ผ ์์์ผ๋ก ํ๋์ ํด๋์ค๋ ํ๋์ ์ํผํด๋์ค๋ง ๊ฐ์ง ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ธํด๋์ค๋ ํ๋๋ง ๊ฐ์ง ์ ์๊ฒ ์ฃ .๋ ์ํผํด๋์ค์ ์ ์ฅ ํ๋กํผํฐ๊ฐ ์กด์ฌํ ์ ์๋๋ฐ ์ด๋ ๊ฒ๋๋ฉด ์๋ธํด๋์ค์๋ ๋ค์์ ์ ์ฝ์ฌํญ์ด ๋ฐ์ํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ๋ฌด์์ ์ด๋ป๊ฒ, ์ธ์ ์ค๋ฒ๋ผ์ด๋ ํ ์ง ์์์ผํฉ๋๋ค.
๐ก ํ์ ๊ฐ์ ๊ด๊ณ๊ฐ ์ค์ํ ํ๋ก๊ทธ๋จ์์ ํด๋์ค๋ก ๊ตฌํํ๋ ๊ฒ์ ์ ํฉํ ๋ฐฉ์์ด ์๋๋ค:
์ด์งํ์์ฒ๋ผ ๋ ์์๋ฅผ ๋น๊ต์ํด์ผํ๋ ๋ฑ์ ๋์นญ ์ฐ์ฐ์์ ์ด ์๋ฏธ๋ฅผ ์กฐ๊ธ๋ ๋ช ํํ ์ ์ ์์ต๋๋ค.
์ด ์ํฉ์์ ๋น์นธ์ ๋ค์ด๊ฐ ์ ์๋ ๊ฒ์ ๋ฌด์์ด ์์๊น์?
์ด๋ฐ ์๋ฌ๋ฐ์ ์์ต๋๋ค. Ordered ํด๋์ค๋ฅผ ์์๋ฐ๋ ์๋ธํด๋์ค๋ฅผ ๊ตฌํํด ์กฐ๊ธ ๋ ์๋ฏธ๋ฅผ ๋ช ํํ ํด๋ณด๊ฒ ์ต๋๋ค.
Numberํด๋์ค๋ Ordered๋ฅผ ์์ ๋ฐ์ต๋๋ค. ์ด ๋ ๋น๊ต๋ฅผ ์ํ precedes๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ฉด ์ด๋จ๊น์? ๋น์ฐํ ์๋ํ์ง ์์ต๋๋ค. precedes์ ํ๋ผ๋ฏธํฐ์ธ other๋ ์ซ์๊ฐ ์๋ ์์์ ์์๋ก ๊ตฌ์ฑ๋ Ordered์์ ์ ์ ์์ต๋๋ค. ๊ทธ๋์ other์ด ๊ฐ ํ๋กํผํฐ๋ฅผ ๊ฐ๋์ง ์ ์ ์์ต๋๋ค. ์ฌ์ค Label์ด๋ผ๋ ํ ์คํธ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด์ผ ์๋ ์์ต๋๋ค.
class Label : Ordered { var text: String = "" ... }
๊ทธ๋์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ Number๋ผ๋ ํ์ ์ผ๋ก ๋ค์ด์บ์คํธ ํ ํ์๊ฐ ์์ผ๋ฉฐ ์ด๋ ์ฝ๋๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
class Number : Ordered { var value: Double = 0 override func precedes(other: Ordered) -> Bool { return value < (other as! Number).value // ๋ค์ด์บ์คํธ } }
์์ ๊ฐ์ ๋ค์ด ์บ์คํธ ๊ตฌ์กฐ(as! ASubclass)๋ ์ฌ์ค ํ์ ๋ค๊ฐ ๊ด๊ณ์์ ์ ์ค์ด ๋ฐ์ํ๋ค๋ ๋ป์ ๋๋ค. ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ ํด๋์ค๋ฅผ ํตํด์๋ ๊ทธ ์์ ์ ํ์ ๊ณผ ๋ค๋ฅธ ํ์ ๊ฐ์ ์ค์ํ ๊ด๊ณ๋ฅผ ํํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋ณดํต ํด๋์ค๋ค๋ก ์ถ์ํ๋ฅผ ํํํ ๋ ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ผ ์ด๋ฐ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํ ์ถ์ํ ๊ตฌ์กฐ๋ ์ด๋ค ๊ฒ๋ค์ ํ์๋ก ํ ๊น์?
๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๋ฉด ํด๋์ค ๋ฟ๋ง์ด ์๋๋ผ ๊ฐ ํ์ ๋ ์ง์ํ๊ณ , ์ ์ ํ์ ๊ด๊ณ๋ค์ ์ง์ํ๋ฉฐ Monolithicํ์ง ์์์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ Monolithic์ด๋ผ๋ ๋ง์ ํ๋์ ์๋น์ค ๋๋ ์ฑ์ด ํ๋์ ๊ฑฐ๋ํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ง ๋ Monolithicํ๋ค๊ณ ํ๋๋ฐ, ์ ๋ ์ด๊ฒ์ ์ดํด๋ฅผ ์์์ ํด๋์ค ๋จ์ผ ์์ ์ด์ผ๊ธฐ ๋ ๋์จ ๊ฐ๋ ์ผ๋ก ์ดํดํ๊ณ ์์ต๋๋ค. ๋จ์ผ ์์์ ๊ฒฝ์ฐ ๋ค์ํ ์์์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ massive ํด์ง ์ ์๋ค๋ ๊ฐ๋ ์ธ๋ฐ, ๋ ๋์ ์ถ์ํ์์๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ผํ๋ค๊ณ ๋ง์ด์ฃ . ์ด๋ฐ ๋ฑ๋ฑ์ ์ฅ์ ์ ๋ชจ๋ ๋ง์กฑ์ํค๋ ๊ฒ์ด ํ๋กํ ์ฝ(Protocol)์ ๋๋ค. ๋๋์ด ๋ฉ์ธ ์ฃผ์ ๊ฐ ๋์ค๋ค์ ใ ใ
๋ท๋ถ๋ถ์ 2ํธ์์ ์ด์ด์ ์งํํ๊ฒ ์ต๋๋ค!
Ref: https://developer.apple.com/videos/play/wwdc2015/408/ - ์ด๋ฐ ํน์ง๋ค์ด ์ Cocoa์์ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฌ์ฉํ๋์ง์ ๋ํ ์ด์ ๊ฐ ๋ ์ ์์ต๋๋ค.
-
- ๋ฌด์กฐ๊ฑด ์ํผํด๋์ค์ ํ๋กํผํฐ๋ฅผ ๋ฐ์๋ค์ฌ์ผํ๋ค.
- ์ด๊ธฐํ ์์ ์ด ๋ฒ๊ฑฐ์์ง๋ค.
- ์ํผํด๋์ค์ ๋ถ๋ณ์ฑ์ ์นจ๋ฒํ๋ฉด ์๋๋ค.
- ์ด๋ฐ ์ํฉ์์ ๋ง์ฝ์ ๋ชจ๋ธ์ด ์ฌ๋ฌ๊ฐ์ง ์ถ์ํ๋ฅผ ํ์๋กํ๋ฉด ์ด๋ป๊ฒ ํ ๊น์? ์ด ๊ฐ๋ ๋ค์ ๋ชจ์์ ์ง๋ ฌํ ํ ์ ์์๊น์? ํด๋์ค์ธ ๊ฒฝ์ฐ๋ ํ๋ญ๋๋ค. ๋ํ ํด๋์ค๋ ๋จ์ผ ์์์ผ๋ก ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ํ๋์ ํด๋์ค์ ๋ชจ๋ ๋ด๊ฒ๋๋ฉด ํด๋์ค๊ฐ ๋น๋ํด์ง๋๋ค. ์ํ๋ ๋งํผ ์ถ์ํ๊ฐ ํ๋ค๊ธฐ ๋๋ฌธ์ด์ฃ .
- ์ด์ผ๊ธฐ๋ฅผ ์ด์ด๊ฐ๋ฉด, ์ฌ๊ธฐ์์ Cocoa ๊ฐ๋ฐ์๋ค์ ๊ณต๊ฐ์ ์ด๋๋๋ฐ ์์ฝ๊ฒ๋ ์ ๋ ์์ง ๊ณต๊ฐ์ด ์๋ฉ๋๋ค.. ์ ๋ ๋ฐ์๋ฅผ ์น ์ ์๋ ๋ ์ด ์ผ๋ฅธ ์ค๋ฉด ์ข๊ฒ ๋ค์.
- ์ด ๊ทน๋จ์ ์ธ ์ด์ผ๊ธฐ๋ฅผ ํ์ด์ ์ค๋ช ํ๋ฉด ํ๋์ ์ ๋ณด๋ฅผ ๋ณด๋ ๊ด์ ์ ๊ฐ์ฒด๋ง๋ค ๋ค๋ฅผ ์ ์๋๋ฐ ์ด ์ ๋ณด๊ฐ ๊ณต์ ๋๋ฏ๋ก์จ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์ ๋ ๋ค๋ฅธ ๋์์๊ฒ ํฐ ์ํฅ์ ์ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
- ์ฌ๊ธฐ์ ์ค๋ช ํ ์์๋ฅผ ์ดํดํด๋ณด๊ฒ ์ต๋๋ค.
- Crusty(Dave๊ฐ ์ฐ๊ธฐํ๋..)๊ฐ ์ฌ๊ธฐ์ ๋๋ตํฉ๋๋ค!
- But the real magic happens when the superclass author breaks out a tiny part of that operation into a separate customization point that the subclass can override, and this customization is overlaid on the inherited implementation. That allows the difficult logic to be reused while enabling open-ended flexibility and specific variations.
- ์์์ ๊ฒฝ์ฐ ๋ณต์กํ ๋ก์ง์ ๊ตฌ์กฐ์์๋ ๋ฉ์๋๊ฐ ์ ์์ ๋ง๊ฒ ๊ตฌํ์ด ๋์ด์๋ค๋ฉด ์๋ธ ํด๋์ค์์ ํธํ๊ฒ ๊ฐ์ ธ๋ค๊ฐ ์ธ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ ฅํ ํด์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ์ด์ด์ ๋งํ๋ฉด Swift์์๋ ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ ๋ชจ๋ ํ์ ์ด ์ผ๊ธ ๊ฐ์ฒด์ด๋ฏ๋ก ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค๊ณ ํฉ๋๋ค. ํ๋ง๋๋ก ๊ตณ์ด ํด๋์ค์ฌ์ผํ๋? ๋ผ๋ ๋ง์ ๋๋ค.
- He let all the air out of my balloon
๋ฐ์ํ
'iOS ์ฑ๊ฐ๋ฐ > WWDC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC 20] - # 10028 Meet WidgetKit(2) (0) | 2022.05.04 |
---|---|
[WWDC 20] - # 10028 Meet WidgetKit(1) (0) | 2022.05.04 |
[WWDC 21] #10216 ARC in Swift: Basics and beyond(ARC์ ๊ดํ์ฌ) (0) | 2022.02.22 |
[WWDC 21] - # 10132 Meet async/await in Swift(Swift ๋น๋๊ธฐ) (0) | 2022.02.10 |
[WWDC 15] - Protocol Oriented Programming(POP) {2ํธ - OOP๋ฅผ POP๋ก ๋ณ๊ฒฝํด๋ณด๊ธฐ} (0) | 2021.05.23 |
๋๊ธ
๋ฐ์ํ
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- ๋ณ๋ ๋์ดํธ#BOJ#ํ์๋ฒ#Python
- ์ฌ์๊ฐ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ํฐํ๋น์น#๋ฆฌ์ฝ#xbox#controller
- ๋ ์ง ๊ณ์ฐ#BOJ#์์ ํ์#Python
- N์ผ๋ก ํํ#DP#Programmers#Python
- NumberofDiscIntersections#Codility#Sort#Python
- API#lazy#
- ํ ๋งํ #๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ๋ฐ๋ณต์์ด#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ์ธํฐ๋ทฐ#4์ฅ
- Distinct#Codility#Python
- ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ#BackTracking
- Brackets#Stacks and Queues#Codility#Python
- PassingCars#Codility#Python
- ์ฟผ๋ํธ๋ฆฌ#BOJ#๋ถํ ์ ๋ณต#Python
- ๊ณต์ ๊ธฐ ์ค์น#BOJ#์ด๋ถํ์#Python
- filter#isalnum#lower
- ๋ฆฌ๋ชจ์ปจ#์์ ํ์#BOJ#Python
- ์ํธ์ฝ๋#dp#BOJ#Python
- ํ ํ๋ก์ ํธ#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- django#slicing
- ๋์ ์๋ฅด๊ธฐ#์ด๋ถํ์#BOJ#Python
- ๋ฏธ๋ก ํ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ์์ด์ฌ์ดํด#BOJ#Python
- Swift#Tuples#Range
- ๋๋ฌด์๋ฅด๊ธฐ#BOJ#์ด๋ถํ์#Python
- django
- Triangle#Sorting#Codility#Python
- ์ข ์ด์๋ฅด๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- ๋ฐฐ์ดํฉ์น๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
๊ธ ๋ณด๊ดํจ