Skip to content

Commit b5f1832

Browse files
committed
README.md ์ˆ˜์ •
1 parent 79d9e4d commit b5f1832

File tree

16 files changed

+2306
-4
lines changed

16 files changed

+2306
-4
lines changed

โ€ŽCommon/README.mdโ€Ž

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Common
2+
3+
## **ํ”„๋ ˆ์ž„์›Œํฌ vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ**
4+
5+
6+
- **ํ”„๋ ˆ์ž„์›Œํฌ** โ†’ ๊ฐ๊ฐ์˜ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ ˆ๊ณ ์„ธํŠธ
7+
- ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ ์งœ์—ฌ์ง„ ๋ฃฐ(ํ”„๋ ˆ์ž„์›Œํฌ)์— ๋”ฐ๋ผ ์ž‘์—…์„ ํ•œ๋‹ค.
8+
- xcode๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์• ํ”Œ์ด ๋งŒ๋“ค์–ด๋†“์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋”ฐ๋ผ ์–ดํ”Œ์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
9+
- **๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ** โ†’ ๋ฏธ๋ฆฌ ๋‚จ๋“ค์ด ๋งŒ๋“ค์–ด ๋†“์€ ํ•„์š”๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
10+
- ์–ดํ”Œ์„ ๋งŒ๋“ค๋•Œ ๋‚จ์ด ๋งŒ๋“  ์ด์œ ์ปค์Šคํ…€ ๋ฒ„ํŠผ์„ ์“ฐ๋Š” ๋А๋‚Œ์ด๋‹ค.
11+
12+
<br>
13+
14+
## **๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ**
15+
16+
17+
**๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ**์€ ์™œ ํ•„์š”ํ• ๊นŒ?
18+
19+
๋„์„œ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํšŒ์› ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ฐ๊ฐ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
20+
21+
> **Member Data**
22+
23+
์ด๋ฆ„:
24+
์„ฑ๋ณ„:
25+
๋‚˜์ด:
26+
์ฃผ์†Œ:
27+
>
28+
29+
> **Book Data**
30+
31+
์ œ๋ชฉ:
32+
๊ฐ€๊ฒฉ:
33+
์ถœํŒ์‚ฌ:
34+
์ €์ž:
35+
>
36+
37+
ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฉค๋ฒ„๋‚˜ ์ฑ…์˜ ๋ชจ๋ธ๋“ค์„ ์ž˜ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ๋”ฐ๋กœ ๋งŒ๋“คํ•„์š”์—†์ด ๊ณต์žฅ์—์„œ ๋นต์ฐ์–ด๋‚ด๋“ฏ์ด ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ์—๋„ ์ข‹์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋„ ์œ ์šฉํ•˜๋‹ค.
38+
39+
<br>
40+
41+
### ๊ฐ์ฒด์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์ง•
42+
43+
1. **์ถ”์ƒํ™”(Abstraction)**
44+
45+
๋ชจ๋ธ๋ง์ด๋ผ๋Š” ๋ง๊ณผ ๋น„์Šทํ•˜๋‹ค. ์‹ค์ƒํ™œ์—์„œ์˜ ์ถ”์ƒํ™”๋ž€ ๊ด€์ฐฐ์ž๊ฐ€ ๊ด€์‹ฌ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ๊ฐ€์ง€๊ณ  ์žฌ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์  ๊ด€์ ์—์„œ, ์‹ค์ฒด๋“ค์˜ ๊ณตํ†ต์  ํŠน์„ฑ์„ ๋ฝ‘์•„๋‚ด์„œ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์ถ”์ƒํ™”์˜ ๊ฐœ๋…์ด๋‹ค. (๋„์„œ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ โ†’ ์ œ๋ชฉ, ์ €์ž, ์ถœํŒ์‚ฌ, ๊ฐ€๊ฒฉ ๋“ฑ..)
46+
47+
2. **์บก์Аํ™”(Encapsulagtion)**
48+
49+
์บก์Аํ™”๋Š” ์—ฐ๊ด€์ด ์žˆ๋Š” ์ƒํƒœ(์†์„ฑ)์ด๋‚˜ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ฌถ์–ด์„œ ํ™œ์šฉํ•œ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค. ์บก์Аํ™”์—์„œ๋Š” ์€๋‹‰ํ™”๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ ํ†ต์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
50+
51+
3. **์ƒ์†์„ฑ(Ingeritance)**
52+
53+
๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฐœ๋…์ด๋‹ค. ์ƒ์†์„ ํ†ตํ•ด, ์ฝ”๋“œ๊ฐ€ ์žฌํ™œ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
54+
55+
4. **๋‹คํ˜•์„ฑ(Polymorphism)**
56+
57+
๋‹คํ˜•์„ฑ์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ ๋  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ์˜ ํ˜„ํƒœ๋กœ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•จ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜๊ฐ์ฒด๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
58+
59+
60+
<br>
61+
62+
## **์ฝ”๋ฐํž™์Šค**
63+
64+
65+
1. ์ฝ”๋“œ(ํ”„๋กœ๊ทธ๋žจ) โ†’ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ์ฝ”๋“œ
66+
2. ๋ฐ์ดํ„ฐ โ†’ ์ „์—ญ ๋ณ€์ˆ˜ ๋ฐ ํƒ€์ž… ๋ณ€์ˆ˜, ๊ณตํ†ต์œผ๋กœ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ
67+
3. ํž™ โ†’ ๋™์ ํ• ๋‹น, ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ
68+
4. ์Šคํƒ โ†’ ํ•จ์ˆ˜ ์‹คํ–‰์„ ์œ„ํ•œ ์ž„์‹œ์  ๊ณต๊ฐ„
69+
70+
<br>
71+
72+
## **๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฌธ์ œ์ **
73+
74+
75+
1. **๊ฒฝ์Ÿ์ƒํ™ฉ/๊ฒฝ์Ÿ์กฐ๊ฑด(Race Condition)**
76+
77+
๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์˜ ํ™˜๊ฒฝ์—์„œ, ๊ฐ™์€ ์‹œ์ ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์ ‘๊ทผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋‹ค๋ฅธ ํ‘œํ˜„์œผ๋กœ๋Š” Thread-Safeํ•˜์ง€ ์•Š๋‹ค๊ณ ๋„ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์“ฐ๊ณ ์žˆ๋Š” ๋™์•ˆ์—๋Š” ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก Thread-Safe ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด๋œ๋‹ค.
78+
79+
<br>
80+
81+
2. **๊ต์ฐฉ์ƒํƒœ(Dead Lock)**
82+
83+
๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์˜ ํ™˜๊ฒฝ์—์„œ, ๋ฒ ํƒ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์œผ๋กœ ์ผ์ด ์ง„ํ–‰์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์€ Thread-Safe๋ฅผ ์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ ์ž˜๋ชป๋œ ์„ค๊ณ„๋กœ ์„œ๋กœ ์ ‘๊ทผ๋ชปํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์ ์œ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋ฅผ ๋ชป์‹œํ‚ค๋Š” ์ƒํ™ฉ์ด๋‹ค.

โ€ŽREADME.mdโ€Ž

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,4 @@
6363

6464
21. ๋ฌธ์ž์—ด๊ณผ ๋ฌธ์ž([Strings and Characters](./SwiftFun/21.Strings&Characters))
6565

66-
22. ๊ณ ๊ธ‰ ์—ฐ์‚ฐ์ž([Advanced Operator](./SwiftFun/22.AdvancedOperator))
67-
68-
23. ์‹ฌํ™” ๋‚ด์šฉ([Advanced Swift](./SwiftFun/23.AdvancedSwift))
66+
22. ๊ณ ๊ธ‰ ์—ฐ์‚ฐ์ž([Advanced Operator](./SwiftFun/22.AdvancedOperator))

โ€ŽSwiftFun/10.AccessControl1/README.mdโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# ์ ‘๊ทผ์ œ์–ด(Access Control)
1+
# ์ ‘๊ทผ์ œ์–ด1(Access Control1)
22

33
> ๐Ÿ’ก ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์€๋‹‰ํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋‚ด๋ถ€์˜ ์„ธ๋ถ€ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ ์˜์—ญ์„ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ ๋‹ค.
44
Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
1+
# ํƒ€์ž… ์บ์ŠคํŒ…(Type Casting)๊ณผ ํ™•์žฅ(Extension)
2+
3+
> ๐Ÿ’ก ํƒ€์ž… ์บ์ŠคํŒ…์€ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ด๋–ค ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ• ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
4+
5+
<br>
6+
7+
## is ์—ฐ์‚ฐ์ž์™€ as ์—ฐ์‚ฐ์ž
8+
9+
- `is` ์—ฐ์‚ฐ์ž: ์ธ์Šคํ„ด์Šค ํƒ€์ž…์„ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.
10+
11+
```swift
12+
// Person() -์ƒ์†-> Student() -์ƒ์†-> Undergraduate()๋ผ๊ณ  ํ• ๋•Œ
13+
14+
var person1 = Person()
15+
var student1 = Student()
16+
17+
person1 is Person // true
18+
person1 is Student // false
19+
20+
student1 is Person // true
21+
student1 is Student // true
22+
student1 is Undergraduate() // false
23+
```
24+
25+
`is` ์—ฐ์‚ฐ์ž๋Š” ์œ„ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ํƒ€์ž…์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ฐธ์ด๋ฉด `true` ๊ฑฐ์ง“์ด๋ฉด `false`๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
26+
(๋„ˆ๋ฌด ๋‹น์—ฐํ•œ๊ฐ€?ใ…‹ใ…‹)
27+
28+
<br>
29+
30+
- `as` ์—ฐ์‚ฐ์ž: ์ธ์Šคํ„ด์Šค ํƒ€์ž…์˜ ํžŒํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.
31+
32+
```swift
33+
var person: Person = Undergraduate()
34+
person.id
35+
person.name
36+
person.email
37+
person.studentId // ์ ‘๊ทผ ๋ถˆ๊ฐ€
38+
person.major // ์ ‘๊ทผ ๋ถˆ๊ฐ€
39+
40+
// ๋ฉ”๋ชจ๋ฆฌ์— studentId์™€ major์˜ ๊ณต๊ฐ„์ด ์žˆ์ง€๋งŒ Person ํƒ€์ž…์ด๋ผ๊ณ  ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.
41+
42+
// person์„ Undergraduate๋กœ ๋‹ค์šด ์บ์ŠคํŒ…, ๋ณดํ†ต if let ๋ฐ”์ธ๋”ฉ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.
43+
if let newPerson: Undergraduate? = person as? Undergraduate {
44+
newPerson.id
45+
newPerson.name
46+
newPerson.email
47+
newPerson.studentId
48+
newPerson.major
49+
}
50+
51+
// ๊ฐ•์ œ ๋‹ค์šด์บ์ŠคํŒ…, ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜
52+
let ppb = person as! Undergraduate
53+
```
54+
55+
์—…์บ์ŠคํŒ…์‹œ์—๋Š” ํ•ญ์ƒ ์„ฑ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— `as`๋งŒ ์“ฐ๋ฉด ๋˜์ง€๋งŒ ์œ„ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ๋‹ค์šด์บ์ŠคํŒ…์‹œ์—๋Š” ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— `as?` ๋‚˜ `as!`๋ฅผ ์“ด๋‹ค.
56+
57+
<br>
58+
59+
## ํƒ€์ž…๊ณผ ๋‹คํ˜•์„ฑ(Polymorphism)
60+
61+
62+
> ๐Ÿ’ก ๋‹คํ˜•์„ฑ์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์ด ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์€ ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๊นŠ์€ ์—ฐ๊ด€์ด ์žˆ๋‹ค.
63+
64+
์•„์ง์€ ์–ด๋ ต๋‹ค.. ์ถ”ํ›„์— ์ดํ•ด ๋”ํ•˜๊ณ  ๋‚ด์šฉ์ถ”๊ฐ€ ์˜ˆ์ •
65+
66+
<br>
67+
68+
## Any์™€ AnyObject
69+
70+
71+
- Anyํƒ€์ž…: ๊ธฐ๋ณธํƒ€์ž…์„ ํฌํ•จํ•œ ๋ชจ๋“  ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋‹ค.
72+
73+
```swift
74+
var some: Any = "Swift"
75+
76+
some = 2
77+
some = 3.2
78+
79+
(some as! String).count
80+
// ๋ฌธ์ž์—ด์ด ๋“ค์–ด์žˆ์ง€๋งŒ count๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— String์ž„์„ ์•Œ๋ ค์ค€๋‹ค.
81+
82+
// Any๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ต์…”๋„ํƒ€์ž…์„ ํฌํ•จํ•œ ๋ชจ๋“  ํƒ€์ž…์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์ด ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
83+
let array: [Any] = [5, "์•ˆ๋…•", Person(), {(name: String) in return name}]
84+
```
85+
86+
Anyํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋– ํ•œ ํƒ€์ž…๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ €์žฅ๋œ ํƒ€์ž…์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํ•ญ์ƒ ํƒ€์ž…์บ์ŠคํŒ…์„ ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
87+
88+
<br>
89+
90+
- AnyObject ํƒ€์ž…: ์–ด๋–ค ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋‹ค.
91+
92+
```swift
93+
let objArray: [AnyObject] = [Person(), Superman(), NSString()]
94+
95+
(objArray[0] as! Person).name
96+
```
97+
98+
Anyํƒ€์ž…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํƒ€์ž…์บ์ŠคํŒ…์„ ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
99+
100+
<br>
101+
102+
## ํƒ€์ž…์˜ ํ™•์žฅ(Extension)
103+
104+
105+
- ์ˆ˜์ง ํ™•์žฅ(์ƒ์†์„ ์ด์šฉ)
106+
โ†’ ๋น„์Šทํ•œ ํƒ€์ž…์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ(์ €์žฅ์†์„ฑ)์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€ํ˜•์‹œ์ผœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
107+
- ์ˆ˜ํ‰ ํ™•์žฅ โ†’ (extension ์ด์šฉ)ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ํƒ€์ž…์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
108+
- ์žฌ์ •์˜๋Š” ์ƒ์†์—์„œ๋งŒ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ์ฃผ์˜ ํ•˜์ž
109+
110+
```swift
111+
class SomeType {
112+
113+
}
114+
115+
extension SomeType {
116+
// ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ(๋ฉ”์„œ๋“œ ํ˜•ํƒœ๋งŒ ๊ฐ€๋Šฅ)
117+
func dosomething() {
118+
print("do something")
119+
}
120+
}
121+
```
122+
123+
ํƒ€์ž…์˜ ํ™•์žฅ์€ ์—ด๊ฑฐํ˜•, ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ์Šค์œ„ํ”„ํŠธ์—์„œ๋Š” ํ™•์žฅ์—์„œ ๊ตฌํ˜„ํ•œ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์žฌ์ •์˜๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (์•ž์— `@objc`๋ฅผ ๋ถ™์ด๋ฉด ๊ฐ€๋Šฅํ•จ)
124+
125+
<br>
126+
127+
- ์†Œ๊ธ‰-๋ชจ๋ธ๋ง: ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ์—์„œ ๋งŒ๋“ค์–ด๋‘” ๊ธฐ๋ณธํƒ€์ž…์„ ํ™•์žฅ์‹œ์ผœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
128+
129+
```swift
130+
extension Int {
131+
var squared: Int {
132+
return self * self
133+
}
134+
}
135+
136+
5.squared // 25
137+
3.squared // 9
138+
```
139+
140+
<br>
141+
142+
- ํƒ€์ž…/์ธ์Šคํ„ด์Šค ๊ณ„์‚ฐ ์†์„ฑ์˜ ํ™•์žฅ
143+
144+
```swift
145+
// ํƒ€์ž… ๊ณ„์‚ฐ ์†์„ฑ์˜ ํ™•์žฅ
146+
extension Double {
147+
static var zero: Double {
148+
return 0.0
149+
}
150+
}
151+
152+
Double.zero // 0
153+
154+
// ์ธ์Šคํ„ด์Šค ๊ณ„์‚ฐ ์†์„ฑ์˜ ํ™•์žฅ
155+
extension Double {
156+
var km: Double {
157+
return self * 1_000.0
158+
}
159+
var cm: Double {
160+
return self / 100.0
161+
}
162+
}
163+
164+
10.0.km // 10000
165+
```
166+
167+
<br>
168+
169+
- ํƒ€์ž…/์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์˜ ํ™•์žฅ
170+
171+
```swift
172+
Int.random(in: 1...100)
173+
174+
extension Int {
175+
static func printNumbersFrom1to5() {
176+
for i in 1...5 {
177+
print(i)
178+
}
179+
}
180+
}
181+
182+
Int.printNumbersFrom1to5()
183+
184+
extension String {
185+
func printHello(of times: Int) {
186+
for _ in 0..<times {
187+
print("Hello \(self)")
188+
}
189+
}
190+
}
191+
192+
"Steve".printHello(of: 5)
193+
```
194+
195+
๊ตฌ์กฐ์ฒด๋‚˜ ์—ด๊ฑฐํ˜•์—์„œ๋Š” `mutating`ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.
196+
197+
<br>
198+
199+
- ํ™•์žฅ์—์„œ์˜ ํด๋ž˜์Šค ์ƒ์„ฑ์ž โ†’ ํŽธ์˜ ์ƒ์„ฑ์ž๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค!
200+
201+
```swift
202+
extension UIColor {
203+
convenience init(color: CGFloat) {
204+
self.init(red: color/255, green: color/255, blue: color/255, alpha: 1)
205+
}
206+
}
207+
UIColor.init(color: 1)
208+
```
209+
210+
์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์•„์ฃผ ์‰ฝ๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ๋‹ค.
211+
212+
<br>
213+
214+
- ํ™•์žฅ์—์„œ์˜ ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ์ž โ†’ ๊ตฌ์กฐ์ฒด์˜ ๊ฒฝ์šฐ ํŽธ์˜์ƒ์„ฑ์ž๋“  ์ง€์ •์ƒ์„ฑ์ž๋“  ์ƒ๊ด€์ด ์—†๋‹ค.
215+
216+
```swift
217+
struct Point {
218+
var x = 0.0, y = 0.0
219+
// ๋ฉค๋ฒ„์™€์ด์ฆˆ ์ด๋‹ˆ์…œ๋ผ์ด์ ธ
220+
}
221+
222+
extension Point {
223+
init(num: Double) {
224+
self.init(x: num, y: num)
225+
}
226+
}
227+
```
228+
229+
<br>
230+
231+
- ์„œ๋ธŒ ์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ
232+
233+
```swift
234+
extension Int {
235+
subscript(num: Int) -> Int {
236+
var decimalBase = 1
237+
for _ in 0..<num {
238+
decimalBase *= 10
239+
}
240+
return (self/decimalBase) % 10
241+
}
242+
}
243+
123456789[0] // 9
244+
123456789[1] // 8
245+
```
246+
247+
<br>
248+
249+
- ์ค‘์ฒฉ ํƒ€์ž…: ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋ฐ ์—ด๊ฑฐํ˜•์— ์ƒˆ ์ค‘์ฒฉ ์œ ํ˜•์„ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
250+
251+
```swift
252+
// ์ค‘์ฒฉ ํƒ€์ž…
253+
class Day {
254+
enum Weekday {
255+
case mon
256+
case tue
257+
case wed
258+
}
259+
var day: Weekday = .mon
260+
}
261+
var ddd: Day.Weekday = Day.weekday.mon
262+
263+
// ์ค‘์ฒฉํƒ€์ž…์˜ ํ™•์žฅ
264+
extension Int {
265+
enum Kind {
266+
case negative, zero, positive
267+
}
268+
269+
var kind: Kind {
270+
switch self {
271+
case 0:
272+
return Kind.zero
273+
case let x where x > 0:
274+
return Kind.positive
275+
default:
276+
return Kind.negative
277+
}
278+
}
279+
}
280+
281+
let a = 1
282+
a.kind // positive
283+
```

0 commit comments

Comments
ย (0)