Fundamentals
- ์ฌ์ฉ์ฒ์ ๋ํ โ๋ช
๋ฃํจโ์ด ์ต์ฐ์ ์ด๋ค.
- โ๊ฐ๊ฒฐํจโ๋ณด๋ค โ๋ช
๋ฃํจโ์ด ๋ณด๋ค ์ค์ํ๋ค.
- ๋ชจ๋ ์ ์ธ์ ๋ํด ๋ฌธ์๋ฅผ ์์ฑํด๋ผ.
- ???
- ํด๋ฆฐ์ฝ๋์ ๋์น๋๋ค.
์ฝ๋๋ฅผ ์ฝ์ ๋ ์ฌ๋์๊ฒ ๋ชจํธํจ์ ์ฃผ์ง ์๋๋ก ํ์ํ ๋ชจ๋ ๋จ์ด๋ฅผ ํฌํจํด๋ผ.
๋ถํ์ํ ๋จ์ด๋ ์๋ตํ๋ค.
- ์ค๋ณต๋๋ ๋จ์ด๋ ์ ๊ฑฐํ๋ค. ๊ตณ์ด ๋ฐ๋ณตํ ํ์๊ฐ ์๋ค.
๋ณ์, ๋งค๊ฐ๋ณ์, ์ฐ๊ด ํ์
์ โ์ญํ โ์ ๋ง์ถฐ ์ง๋๋ค. ํ์
์ ๋ง์ถ์ง ์๋๋ค.
- ํ์
์์ฒด์ ์๋ฏธ๊ฐ ๋ณ์์ด๋ฆ์ ๋ค์ด๊ฐ๋ฉด ๋ช
ํํ์ง๋ ์๊ณ , ํํ๋ ฅ๋ ์ข์ง ์๋ค.
- โ์ญํ โ์ ํํํ ์ ์๋ ์ด๋ฆ์ด์ด์ผ ์ข๋ค.
- ๊ทธ๋ฐ๋ฐ ์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด, ํน์ ํ๋กํ ์ฝ ํ์
์ด๋ฆ์ด ๋ณ์๋ฅผ ๋๋ณํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ ํ๋กํ ์ฝ์
Protocol
์ด๋ผ๋ ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ์ ๋ฌธ์ ๋ฅผ ํผํ๋ค.
ํ๋ผ๋ฏธํฐ์ ์ญํ ์ ๋ช
ํํ ํ๊ธฐ ์ํด ์ฝํ ํ์
์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ํด๋ผ.
- ๋งค๊ฐ๋ณ์ ์ ํ์ด NSObject, Any, AnyObject, Int, String๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ ํ์ธ ๊ฒฝ์ฐ
- ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ง๋ ์๋๋ฅผ ์์ ํ ํ์
ํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
Strive for Fluent Usage
์์ด ๊ตฌ๋ฌธ์ฒ๋ผ ์์ฐ์ค๋ฝ๊ฒ ์ฝํ๋๋ก ๋ง๋ค์ด๋ผ.
ํฉํ ๋ฆฌ ๋ฉ์๋์ ์ด๋ฆ์ make
๋ก ์์ํด๋ผ.
์์ฑ์์ ํฉํ ๋ฆฌ ๋ฉ์๋์ Label์ Base name์ ์ฌ์ฉํ์ง ๋ง๋ผ.
- Label: argument label
- Base name: โmakeโ์ ๊ฐ์ ๋จ์ด
Side Effect์ ๋ฐ๋ผ ๋ฉ์๋ ์ด๋ฆ์ ๊ตฌ๋ถํด๋ผ.
- side-effect: ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ ์ธ์๋, ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ชฝ์์๋ ๋ณํ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ
- side-effect๊ฐ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด โ๋ช
์ฌโ๋ฅผ ์ฌ์ฉํ๋ค.
x.distance(to: y)
, i.successor()
- ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด โ๋์ฌโ๋ฅผ ์ฌ์ฉํ๋ค.
Mutating / Nonmutating ๋ฉ์๋์ ํ ์์ผ๋ก ๊ตฌ์ฑํด๋ผ.
- ํน์ ๋์์ด ์ ์ด์ โ๋์ฌโ๋ก ๋ฐ์ ํํ๋ ์ ์๋ค๋ฉด,
- nonmutating function์ ์ด๋ฆ์ โedโ, โingโ๋ฅผ ๋ถ์ฌ์ nonmutating function์ ์ด๋ฆ์ ๋ง๋ค์ด๋ผ.
Mutating | Nonmutating |
---|
x.sort() | z = x.sorted() |
x.append(y) | z = x.appending(y) |
- ํน์ ๋์์ด ์ ํฌ์ โ๋ช
์ฌโ๋ก ๋ฐ์ ํํ๋ ์ ์๋ค๋ฉด,
- mutating function์ ์ด๋ฆ์ โformโ์ ๋ถ์ฌ์ mutating function์ ์ด๋ฆ์ ๋ง๋ค์ด๋ผ.
Mutating | Nonmutating |
---|
x.formUnion(z) | z = x.unioned(z) |
x.formSuccessor(y) | z = x.successor(&y) |
Boolean์ ์ด๋ฅผ ๋ฐ๋ ์ชฝ์์ โassertโ๋ฌธ์ ์ฝ๋ ๊ฒ ์ฒ๋ผ ํํ๋์ด์ผ ํ๋ค.
x.contains(y)
x.isDisjoint(with: y)
x.isSubset(of: y)
x.isEmpty
โ๋ฌด์์ธ์งโ๋ฅผ ๋ํ๋ด๋ ํ๋กํ ์ฝ์ ์ด๋ฆ์ ๋ช
์ฌ๋ก ํํํด๋ผ.
ํ๋กํ ์ฝ ์ด๋ฆ | ํ๋กํ ์ฝ ์ค๋ช
|
---|
Collection | ์ปฌ๋ ์
(collection)์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
IteratorProtocol | ์ดํฐ๋ ์ดํฐ(iterator)์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
Sequence | ์์๊ฐ ์๋ ์ํ์ค(sequence)์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
OptionSet | ์ต์
์งํฉ(option set)์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
๋ฅ๋ ฅ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ์ ์ด๋ฆ์ โableโ๋ก ๋๋์ผ ํ๋ค.
ํ๋กํ ์ฝ ์ด๋ฆ | ํ๋กํ ์ฝ ์ค๋ช
|
---|
Comparable | ๋น๊ต ๊ฐ๋ฅํ(comparable) ๊ฐ์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
Equatable | ๋๋ฑ๋น๊ต(equatable) ๊ฐ๋ฅํ ๊ฐ์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
RawRepresentable | raw value๋ฅผ ๊ฐ์ง๋(raw-representable) ํ์
์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋กํ ์ฝ |
Type, Perperty, variables, constants๋ ๋ช
์ฌ๋ก ์ฝํ์ผ ํ๋ค.
Use Terminology Well
๋ชจํธํ ์ฉ์ด๋ฅผ ํผํด๋ผ.
- ๋ ์ผ๋ฐ์ ์ธ ๋จ์ด๋ก ์๋ฏธ๋ฅผ ์ ๋ฌํ ์ ์๋ค๋ฉด ๋ชจํธํ ์ฉ์ด๋ ํผํด๋ผ.
- ๊ตณ์ด โํผ๋ถโ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ โํํผโ๋ก ํํํ ํ์๋ ์๋ค.
- ์ ๋ฌธ ์ฉ์ด๋ ํ์์ ์ผ ๋๋ง ์ฌ์ฉํด๋ผ. ์ค์ํ ์ ๋ณด๋ฅผ ๋์น ํ์๊ฐ ์๋ค๋๊ฐ.
์๋ก์ด ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ๊ทธ ์๋ฏธ์ ๋ฑ ๋ง๊ฒ ์ฌ์ฉํด๋ผ.
- ์ด๋ฏธ ์๋ ๋จ์ด์ธ๋ฐ ๋ค๋ฅธ ๋จ์ด๋ฅผ ์ด๋ค๋ฉด ์์ฌ๊ฐ ํ๋ผ ๊ฑฐ๋ค.
- ์ ์ฐ์ฐจ ์ ์
๋ ๊ฒฐ๊ตญ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋จ์ด๋ฅผ ์ฐพ์ ๊ฒ์ด๋ค.
์ฝ์ด ์ฌ์ฉ์ ํผํด๋ผ.
- ํนํ ๋นํ์ค ์ฝ์ด๋ ๊ฑฐ์ ์ ๋ฌธ ์ฉ์ด๋ผ ๋ด๋ ๋ฌด๋ฐฉํ๋ค.
- ๋ง์ฝ ์ฝ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, ์น ๊ฒ์์ ํตํด ์ฝ๊ฒ ์ฐพ์ ์ ์์ด์ผ ํ ์ ๋๋ก ๋ณดํธ์ ์ด์ด์ผ ํ๋ค.
์ด์ ์ ๋ฌธํ๋ฅผ ์์ฉํด๋ผ.
- ์์ ์ด๋ณด์๋
Array
๋ณด๋ค List
๊ฐ ๋ ์ฌ์ธ ์ ์๋ค.
- ํ์ง๋ง ๋ฐฐ์ด์ ์ปดํจํ
์ ๊ธฐ๋ณธ์ด๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
- ์ต์ํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ทธ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ๋ณด๋ฅผ ์ตํ๋ ์๊ฐ๋ ์ค๊ธฐ ๋๋ฌธ์, ๊ทธ์ ๋ํ ๊ฐ์น๊ฐ ์๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก
verticalPositionOnUnitCircleAtOriginOfEndOfRadiusWithAngle(x)
๋ณด๋ค sin(x)
๊ฐ ๋ ์ข๋ค.
Conventions
O(1)
์ด ์๋ ๋ชจ๋ computed property์ ๋ณต์ก๋๋ฅผ ๋ฌธ์ํํด๋ผ.
- ๋ณดํต ์ฌ์ฉํ ๋ ๋ณต์ก๋๊ฐ ๋์ง ์๋ค๊ณ ์๊ฐํ๋ ๊ฒฝํฅ์ด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
Free functions๋ณด๋ค๋ methods๋ฅผ ์ฌ์ฉํด๋ผ.
- Free functions:
print
์ ๊ฐ์ด ํ์
์ ์ํ์ง ์์ ํจ์
- ํน๋ณํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ์.
min(x, y, z)
: ๋ช
ํํ self๊ฐ ์๋ ๊ฒฝ์ฐ
print(x)
: Generic์ผ๋ก ์ ๊ณต๋์ด์ผ ํ ๋
sin(x)
: ํน์ ํจ์๊ฐ ์ด๋ฏธ ์ ์ ๋ฆฝ๋ ๋๋ฉ์ธ์ ์ผ์ข
์ผ ๋ (์ํ)
Case Convention์ ์งํค์.
- Type, Protocol: UpperCamelCase
- EveryThingElse: lowerCamelCase
- ์ฝ์ด์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ Uppercase๋ก ํํํ๋ค.
URL
, HTTP
, JSON
, XML
, HTML
, CSS
, ID
, API
, iOS
, macOS
๋ฉ์๋๋ ๊ธฐ๋ณธ ์ด๋ฆ์ ๊ณต์ ํ ์ ์๋ค.
- ์ด๊ฑด ์ฌ์ค ๋น์ฐํ ๊ฒ.
value
๋ผ๋ ์๋ฏธ๋ ๊ฐ ํ์
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ผ๋ ์ด๋ฆ์ ๊ณต์ ํด์ ์ฌ์ฉํ ์ ์๋ค.
Reference