- Class(OOP) VS Struct, Enum(POP)
- The Three Beefs
- Swift is a POP Language
- More Protocol Extension Tricks
- They do have their place...
- Encapsulation: ๊ทธ๋ฃนํ
- Access Control: ์ ๊ทผ ์ ์ด์
- Abstraction: ์ถ์ํ
- Namespace: software๊ฐ ์ปค์ง๋ฉด์ ๋ฐ์ํ๋ ์ถฉ๋์ ๋ง์์ค๋ค
- Expressive Syntax: ์ ์ฅ/์ฐ์ฐ ํ๋กํผํฐ, ๋ฉ์๋, ์๋ธ์คํฌ๋ฆฝ์ ..
- Extensibility: ๋์ค์ ํ์ํ๊ฑฐ ์ถ๊ฐ ๊ฐ๋ฅ
Access Control, Abstraction, Namespace๋ ํนํ ๋ณต์ก์ฑ(Complexity)์ ๊ด๋ฆฌํ๊ฒ ํด์ค๋๋ค.
- struct, enum๋ ํ ์ ์์.
- Swift์์ ์ด๋ฆ ์ง์ ์ ์๋ ๋ชจ๋ type์ ์ผ๊ธ๊ฐ์ฒด์ด๊ณ ์์ ๋ชจ๋ ํน์ง์ ๊ฐ์ ์ ์๋ค.
- ์์์ class๋ง ๊ฐ๋ฅ
-
์์์ ํตํด ์ฝ๋๊ณต์ , ์ปค์คํ ๊ฐ๋ฅ(override)
-
struct๋ ์ปค์คํ ๊ฐ๋ฅ
-
class๋ ๊ฐ๋ ฅํ์ง๋ง cost๊ฐ ํฌ๋ค
- ๊ฐ ํ์ ์ ์ฐธ์กฐ๋ฅผ ๊ณต์ ํด ์๋ํ์ง ์์ ๋ณํ๊ฐ ๋ฐ์ํด ๋ฌธ์ ๋ ์ ์๋ค.
- ๊ฐ ํ์ ์ cost๊ฐ ํฌ๋ค
- Superclass 1๊ฐ๋ง ๊ฐ์ ์ ์๋ค.
- ํ์ ์๋๊ฒ๋ ๋ค ์์ ๋ฐ์
- class๋ฅผ ์ ์ํ๋ ์๊ฐ super class๋ฅผ ์ ํด์ผํ๋ค.(extension์ผ๋ก ์์ ๋ถ๊ฐ๋ฅ)
- Superclass์ ์ ์ฅ ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด
- ์์ ๋ฐ์์ผ๋ง ํ๋ค.
- ์ ์ฅํ๋กํผํฐ๋ค์ ์ด๊ธฐํ ํด์ค์ผํ๋ค.
- superclass์ invariant๋ฅผ ๊นจ๋ฉด์๋๋ค.
- method๋ค์ด override๋ ๊ฑด๊ฐ ์์์ผํ๋ค.(final ํค์๋ ๋ช ์)
- cocoa์์ delegate ํจํด์ ์ฌ์ฉํ๋ ์ด์ ์ ๋๋ค.
- Ordered์ precedes์ ๊ตฌํ๋ถ์ ์ด์ฉ์ ์์ด ๋ถ์ํ ๊ตฌํ
- Number์ precede์ other์ Label์ด ๋ ์ ๋ ์๋ค.(static type safety hole)
- as! ASubclass์ code smell ์ด๋ค.
- as! ASubclass์ type relationship์ด ์์๋์์ ์๋ฏธํ๋ค.
- Swift๋ ์ ์ ํ์ ์ธ์ด๋ก ๋ณ์, ์์์ ํ์ ์ด ์ปดํ์ผ ์์ ์ ๊ฒฐ์ ๋๋๋ฐ ํ์ ์บ์คํ ์ ์ฌ์ฉํ๋ฉด ๋ฐํ์์ ํ์ ์ด ์ ํด์ ธ ์บ์คํ ์ ์คํจํ๋ ๊ฒฝ์ฐ ๋ฐํ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- protocol๋ก ํ๋ฉด๋จ
Your first stop for new abstractions
- Ordered์ ๋ถํ์ํ ๊ตฌํ๋ถ ์ญ์ (fatal error ์ ๊ฒฝ์ฐ์ง ์์๋ ๋จ)
- override ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋จ
- ์์์ ์ฌ์ฉํ์ง ์์์ผ๋ก class -> struct๋ก ๋ณ๊ฒฝ
- ๊ฐ์ ํ์ ์บ์คํ (static type safety hole) ์ ๊ฑฐ
- Self๋ ์๊ธฐ ์์ ์ ํ์ ์ ๋ํ๋ธ๋ค.
- Ordered๋ Label์ด ๋ ์ ๋์๊ณ Number๊ฐ ๋ ์๋์๋ heterogeneous์ธ array๋ผ ์ปดํ์ผ๋ฌ๊ฐ Homogeneous์ธ array๋ก ๋ฐ๊พธ๋ผ๊ณ ํ๋ค.
- generic์ ์ฌ์ฉํ๋ฉด Homogeneous์ธ array๋ก ์ธ์์ํฌ ์ ์๋ค.
-
mocks์ ํ ์คํ ์ฝ๋๋ฅผ ์ธ๋ถ ๊ตฌํ๊ณผ ์ฐ๊ฒฐํด์ผ ํ์ง๋ง ํ๋กํ ์ฝ์ ์ฐ๊ฒฐ์ ๋์ ์ ์์ด ํ ์คํธํ๊ธฐ ์ฉ์ดํฉ๋๋ค.
-
protocol์ ์ฐ๋ฆฌ์๊ฒ ์ธ์ด์ ์ํด ๊ฐ์๋๋ ์์น์ ์ธ interface๋ฅผ ์ ๊ณตํ๊ธฐ๋ ํ๊ณ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋๊ตฌ๋ค์ ์ฐ๊ฒฐํ ์ ์๋ hook์ ์ ๊ณตํ๊ธฐ๋ ํฉ๋๋ค.
- extension์ ์ฌ์ฉํด ๋ฐ๋ณต๋๋ ๊ตฌํ์ ํ๋ฒ๋ง ๊ตฌํํด ์ฌ์ฉํ๋ค.
- circleAt์ ์๊ตฌ์ฌํญ์ ์๊ณ , extension์ ๊ตฌํ
- rectangleAt์ ์๊ตฌ์ฌํญ์ ์๊ณ , extension์ ๊ตฌํ
- type inference์ ์ํฌ ๊ฒฝ์ฐ์๋ ๋๋ค ์๋ก ์ปค์คํ ํ๊ฒ ์คํ๋๋ค.
- type annotation ํ๋ฉด ์๊ตฌ์ํญ์ ์๋ retangleAt์ ์ปค์คํ ํ ๋ถ๋ถ์ด ์๋๋ผ protol์ extension์ ๊ตฌํํ ๋ถ๋ถ์ด ์คํ๋๋ค.
Scenes from the standard library and beyond
- ์ด๋ค collection์ ์์๋ค์ == ๋ก ๋น๊ตํ ์ ์๋ค.
- where์ ์ฌ์ฉํด Equatable Protocol์ ๋ฐ๋ฅด๋ element๋ค๋ง ์ฐ์ฐํ ์ ์๊ฒ ์์
- Int๋ Ordered ํ๋กํ ์ฝ์ ์ฑํํ์ง ์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํจ
- Int, String ์ด Ordered ํ๋กํ ์ฝ์ ์ฑํํ๊ฒํด ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํจ
- Comparable ํ๋กํ ์ฝ์๋ '<' ์ฐ์ฐ์๊ฐ ์ด๋ฏธ ์กดํดํ๋ค.
- Comparable์์ extension์ ํตํด precedes๋ฅผ ๊ตฌํํด ๊ฐ์
- Comparable์ ํ์ฅํด Double ํ์ ์ด precedes ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง Ordered ํ๋กํ ์ฝ์ ์ฑํํ์ง ์์ Double ํ์ ์์ binarySearch ๋ฉ์๋๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๋ค
- constrained extension ์ฌ์ฉํด Ordered ํ์ฅํด Ordered๋ฅผ ์ฑํํ ํ์ ๋ง precedes ๋ฉ์๋์ binarySearch ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํจ
- Swift1 ์ fully generallized binary search
- Swift2 ์์ Protocol์ ์ฌ์ฉํด ๊ฐ์
- Protocol์ ์ฑํํ๋ฉด extension์ ๊ตฌํ๋ ์ธํฐํ์ด์ค๋ค ์ฌ์ฉ๊ฐ๋ฅ
- drawable ๋ฐฐ์ด์ ๋น๊ตํ ์ ์๋ค.
- ๋ฐฐ์ด์ count ๊ฐ ๊ฐ๊ณ ํ๋์ฉ ๋น๊ตํด ๊ฐ์์ง ํ์ธ
- Drawable์ Equatable ํ๋กํ ์ฝ์ ์ฑํํ์ง ์์์ == ์ฐ์ฐ์๋ก ๋น๊ตํ ์ ์๋ค.
- Equatable ํ๋กํ ์ฝ์ Self๋ฅผ ์ฌ์ฉํด ๋น๊ต(Static Dispatch, Homogeneous)ํ๋๋ฐ Drawable์ Circle์ด ๋ ์๋ Polygon์ด ๋ ์๋ ์์ด(Dynamic Dispatch, Heterogeneous)์ ์ถฉ๋ํ๋ค.
- isEqualTo ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋น๊ตํ๋ค.
- extension์ ํตํด ๋ค์ด ์บ์คํ ์ ํตํด์ type์ ๋ณํํ๋ฉด Equatable์ ์ฑํํ๊ณ Self๋ฅผ ์ฌ์ฉํด ๋น๊ตํ ์ ์๋ค.
- Static Dispatch -> Dynamic Dispatch๋ก ๋ณ๊ฒฝ
- Heterogeneous -> Homogeneous๋ก ๋ณ๊ฒฝ
- ๋ณต์ฌ๋ ๋น๊ต๊ฐ ์๋ฏธ์๋์ํ(Singleton ์ฒ๋ผ ํ๋ฒ ๋ง๋ค์ด ๋๊ณ ์ฐ๋๊ฑฐ ๋งํ๋๊ฑฐ ๊ฐ์)(e.g., Window)
- ์ธ์คํด์ค์ ์๋ช
์ฃผ๊ธฐ๊ฐ ์ธ๋ถ์์ธ๊ณผ ๊ด๋ จ์์๋(e.g., TemporaryFile)
- reference type์ ์์ ํ identity๊ฐ ์์ด ์ธ๋ถ์ entity์ correspondํ๋ ๋จผ๊ฐ๋ฅผ ๋ง๋ ๋ค๋ฉด ์ฐธ์กฐ ํ์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ธ์คํด์ค๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ์ํ๋ฅผ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๊ณ ๋ฉ์๋๋ ํด๋น ๊ฐ์ฒด๊ฐ ์๋ ์ธ๋ถ์์ ์ํํ๋ค.(e.g., CGCContext)
- ์ฃผ์ ์ฌํญ
- final๋ก ์ ์ธ
- base class ์์ด Protocol ์ฌ์ฉ
- ํ๋ ์์ํฌ๋ฅผ ๋ฐ๊พธ๋ ค๊ณ ํ์ง๋ง๋ผ
- software ์์์ ๊ตฌ์ฑ์์๊ฐ ๋๋ฌด ์ปค์ง๊ฒ ํ๋ฉด์๋๋ค.
- class๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ class๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด ๋ด๋ผ