ํฐ์คํ ๋ฆฌ ๋ทฐ
[Swift ] - Protocol(ํ๋กํ ์ฝ) vs Inheritance(์์)
B_log 2021. 3. 30. 10:43
๐ฏ Protocol(ํ๋กํ ์ฝ) vs Inheritance(์์)
๐ Protocol ๋ฐ Inheritance ๋์ง๊ธฐ
- Protocol์ ํ์ตํ๋ฉฐ ์ง์์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ 'blueprint(์ฒญ์ฌ์ง)์ด๋ค', '๊ณตํต ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค' ๋ฑ ์ ๋๋ค. ์ด๋ฌํ ํ์ต์ ํ๋ฉฐ ์์ฐ์ค๋ฝ๊ฒ ๋์์ ๋ ์ค๋ฅด๋ ์๊ฐ์ ์์ ํน์ง์ด ํด๋์ค์ ์์(inheritance)์ ์ ์ฌํ๋ค๋ ์ ์ด๋ฉฐ ์ด ๋๊ฐ์ง ๊ฐ๋ ์ ๊ตฌ๋ถํ ํ์์ฑ์ ๋๊ผ์ต๋๋ค. ์ฐ์ ๊ตฌ๋ถ์ ํ๊ธฐ ์ , ๊ฐ๊ฐ์ ํน์ง์ ์๊ธฐํ ํ์๊ฐ ์์ต๋๋ค.์์ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ผ๋ก ์ ํํ ์ฐจ์ด๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋์ ์์ ์ํฉ์ ํตํด ๋ ๊ฐ๋ ์ ์กฐ๊ธ ๋ ์์๋ณผ ํ์๊ฐ ์์ต๋๋ค.
- ์์ : ์์๋ฐ์ ํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ๋๋ค.(๋ถ๋ชจ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋๋ค)
- ํ๋กํ ์ฝ: ํ๋กํ ์ฝ์ ์ ์ธ์ ํตํด ์ด ํ๋กํ ์ฝ์ ๊ท์ฝ์ ์ค์ํ๊ฒ ๋ค. ๊ฐ์ฒด๊ฐ์ ์ํต ๊ท์ฝ์ด๋ค.
๐ ์์๋ฅผ ํตํ ์ดํด
์์ ์์๋ Employee๋ผ๋ ํด๋์ค๋ก ๊ณ ์ฉ๋ ๋ชจ๋ ์ฌ๋์ด ๊ณตํต์ผ๋ก ๊ฐ์ ธ์ผํ ํน์ง์ด ๊ตฌํ๋์ด์๊ณ , PM, Developer, Tester๋ผ๋ ๊ฐ๊ฐ๋ณ์ ํผ๊ณ ์ฉ์ธ์ด ํด๋น ํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค. ๊ฐ๋ ์ ์ผ๋ก ๋ณด๋ฉด, Employee๋ ๋ชจ๋ ๊ณ ์ฉ์ธ์ด ๊ฐ์ ธ์ผํ ๋ด์ฉ์ด๋ฉฐ PM, Developer, Tester๋ Employee์ ํน์ง์ ๊ทธ๋๋ก ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ง์ฝ ์๋์ ์ฝ๋๊ฐ Employee์ ์ถ๊ฐ๋๋ค๋ฉด ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ์ง์๋ค์ด ์๋์ ์ฝ๋๋ฅผ ๊ฐ์ง๋๋ค.
๋ง์ฝ ์ด๋ ๊ฒ ์์ฑ๋๋ค๋ฉด, PM ์ญ์ ์์ ๋ฉ์๋๋ค์ ๋ชจ๋ ๊ฐ๊ฒ ๋๋๋ฐ, ๋ ๋ฉ์๋ sendDevelopingReport()์ sendTestingReport()๋ PM class์ ๋ฌด๊ดํ๊ฒ ๋ฉ๋๋ค. ๋ค์ ๋งํด, PM์ DevelopingReport์ TestingReport๋ฅผ ๋ณด๋ผ ์ผ์ด ์์ต๋๋ค. PM class๋ getDevelopingReport()์ getTestingReport()๋ง์ ๊ฐ์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ ๊ตฌ์กฐ๋ ์ข์ ๋ชจ๋ธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์๋์ ์ํฉ์ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
์ด ๋ชจ๋ธ์ ๋ค๋ฅธ ๋ชจ๋ธ์์ ์ฌ์ฉํ๊ณ , Developer class์ instance๋ฅผ ์์ฑํ๋ค.
์ด ์ํฉ์์, getDevelopingReport๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค Developer๊ฐ ์ ์ถํ report์ธ์ง(์ด๋ค Developer instance๊ฐ getDevelopingReport() ๋ฉ์๋๋ฅผ ํธ์ถํ๋์ง)๊ฐ ํท๊ฐ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ์ด๋ฐ ๋ฌธ์ ์ ์ํฉ์์ protocol์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ฉฐ, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์์ ์ฝ๋์์๋ PM์ sendํ ํ์๊ฐ ์์ผ๋ฏ๋ก getDevelopingReport์ getTestingReport๋ง ๊ฐ์ง๊ฒ ๋๊ณ , Developer๋ sendDevelopingReport๋ง, Tester๋ sendTestingReport ๋ฉ์๋๋ง ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ฆ, ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ด๋ ๊ฐ๋ ์ ์์์ ํตํด ์ฒ๋ฆฌํ๊ณ , ๊ฐ๋ณ์ ์ธ ๊ฐ๋ ์ ํ๋กํ ์ฝ์ ์ ์ธํจ์ผ๋ก์จ ๊ฐ๋ณ ๊ตฌํํ์ฌ ํ์์๋ ๊ธฐ๋ฅ์ ์ค์ฒฉ์ ๋ง์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋จ์ํ ์์์ ๋ฐ๊ณ ์ถ๊ฐ๋ก ๊ทธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ๋ ๊ฒ๊ณผ ํ๋กํ ์ฝ์ ์ ์ธํ์ฌ ์ฑํํ๋ ๊ฒ์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น์?
ํ๋กํ ์ฝ ์์ด class ์์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ฒ๋๋ฉด ์ฐ์ ๊ฐ์ ์ฑ์ด ์์ด์ง๋๋ค. ์ฆ, ํ๋กํ ์ฝ์ ์ฌ์ฉํจ์ผ๋ก์จ ๋งค๋์ ๊ฐ ๊ฐ์ ธ์ผํ๋ ํ์์ ์ธ ๊ธฐ๋ฅ, ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ธ์ผํ๋ ํ์์ ์ธ ๊ธฐ๋ฅ, ํ ์คํฐ๊ฐ ๊ฐ์ ธ์ผํ๋ ํ์์ ์ธ ๊ธฐ๋ฅ์ ๋ช ์ํจ์ผ๋ก์จ ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ๋ง ํ๊ฒ ํด์ฃผ๋ฉฐ ๋ค๋ฅธ ํด๋์ค์์๋ ํ์ฅ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๋ํ Swift๋ ๋ค์ค ์์์ด ๋ถ๊ฐ๋ฅํ ์ธ์ด๋ก, ์ฌ๋ฌ ํด๋์ค๊ฐ ์๋ก ๋ค์ํ ๊ณตํต์ ์ ๊ณต์ ํ ๋ ์ด๋ฅผ ๋ช ์์ ์ผ๋ก ํํํด์ฃผ๊ธฐ ์ํด์๋ Protocol์ ์ ์ธ์ด ํ์ํฉ๋๋ค.
๐ ๋ ์๊ฐํด๋ณด๊ธฐ
- ์์์ ์ํฉ์์ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ๊ณตํต์ ๋ง์ ์ถ์ํํ ๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ์ ๋ณด๋ค์ด ํฉํด์ง ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ๋ก ์กด์ฌํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ์์์ ํตํ๋ฉด ์ํ์ง ์์๋ ๋ถ๋ชจ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์์ ํด๋์ค ์ค ํ๋๊ฐ, ์ํ์ง ์๋ ๋ค๋ฅธ ์์ ํด๋์ค๋ง ๊ฐ์ ธ์ผ ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ , ๋ถ๋ชจ์ ์์์ ๊ฒฐํฉ๋๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
reference: Protocol vs Inheritance
'iOS ์ฑ๊ฐ๋ฐ > Swift Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] - ํด๋์ค(Class) vs ๊ตฌ์กฐ์ฒด(Struct) vs ์ด๊ฑฐํ(Enum) (0) | 2021.03.30 |
---|---|
[Swift] - ํํ(Tuples), Range (0) | 2021.03.30 |
[Swift] ํ๋กํผํฐ(Properties) (0) | 2021.03.23 |
[Swift] ์ด๊ฑฐํ(Enum) (0) | 2021.03.23 |
[Swift] Datatype (0) | 2021.03.23 |
- Total
- Today
- Yesterday
- PassingCars#Codility#Python
- django
- Triangle#Sorting#Codility#Python
- API#lazy#
- ๋ณ๋ ๋์ดํธ#BOJ#ํ์๋ฒ#Python
- ์ฌ์๊ฐ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- Swift#Tuples#Range
- ์์ด์ฌ์ดํด#BOJ#Python
- ํ ํ๋ก์ ํธ#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ์ํธ์ฝ๋#dp#BOJ#Python
- Distinct#Codility#Python
- ๋ฐฐ์ดํฉ์น๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ#BackTracking
- ๋๋ฌด์๋ฅด๊ธฐ#BOJ#์ด๋ถํ์#Python
- NumberofDiscIntersections#Codility#Sort#Python
- filter#isalnum#lower
- ๋ ์ง ๊ณ์ฐ#BOJ#์์ ํ์#Python
- django#slicing
- ํ ๋งํ #๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ๋ฐ๋ณต์์ด#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ํฐํ๋น์น#๋ฆฌ์ฝ#xbox#controller
- ๋ฏธ๋ก ํ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ๋์ ์๋ฅด๊ธฐ#์ด๋ถํ์#BOJ#Python
- ๋ฆฌ๋ชจ์ปจ#์์ ํ์#BOJ#Python
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ์ธํฐ๋ทฐ#4์ฅ
- Brackets#Stacks and Queues#Codility#Python
- ๊ณต์ ๊ธฐ ์ค์น#BOJ#์ด๋ถํ์#Python
- ์ข ์ด์๋ฅด๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- ์ฟผ๋ํธ๋ฆฌ#BOJ#๋ถํ ์ ๋ณต#Python
- N์ผ๋ก ํํ#DP#Programmers#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 |