๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OPP)
๋ฉํฐํจ๋ฌ๋ค์ ์ธ์ด, Swift
์ฝ๋๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ๋ฐฉ๋ฒ(ํจ๋ฌ๋ค์)์ ๋ค์ํ๋ค.
ํ๋์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋๋ถ๋ถ 2๊ฐ ์ด์์ ํจ๋ฌ๋ค์์ ๊ตฌํํ ์ ์๋ ๋ฉํฐํจ๋ฌ๋ค์ ์ธ์ด์ด๋ค.
Swift๋ ์๋์ ๊ฐ์ ํจ๋ฌ๋ค์์ ๊ตฌํํ๊ณ ์๋ค.
- Object-Oriented Programming(๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ)
- Protocol-Oriented Programming(ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)
- Functianal Programming(ํจ์ํ ํ๋ก๊ทธ๋๋ฐ)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํจ๋ฌ๋ค์ ์ค ํ๋๋ก, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ผ๋ ๋จ์๋ก ๋๋์ด ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐฉ๋ฒ ์ค ํ๋.
- ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ : ํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ ์์์ ์ ์ฐจ๋ก ๋ณด๋ ๋ฐฉ์. ํ๋ก๊ทธ๋จ์ ๋น ๋ฅด๊ฒ ๋ง๋ค ๋ ์ ์ฉํ๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ : ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ๋งํด์ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๋ฐฉ์.
- ํด๋์ค ๋จ์๋ก ์์ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ๋ง๋ค ๋ ์ ์ฉํ๋ค.
- ํด๋์ค์ ์์์ ํตํด ํ์ฅํจ์ผ๋ก์จ ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
‘๊ฐ์ฒด(Object)’๋?
์ฃผ๋ณ์ ์กด์ฌํ๋ ๋ชจ๋ ๋์๊ณผ ๊ฐ๋ ๋ค์ ๊ฐ์ฒด๋ก ํํํ๊ณ ๊ฐ์ฒด์ ์ํ์ ๋์์ ๋ณ๊ฒฝํด ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฐ๋ ์ด๋ค.
๊ฐ์ฒด๋ ํด๋์ค์ ์ธ์คํด์ค๋ก, ๋ฐ์ดํฐ(์์ฑ)์ ๊ธฐ๋ฅ๋ค(๋ฉ์๋)๋ฅผ ํ๋๋ก ๋ฌถ์ ๋์์ ๋งํ๋ค.
๊ฐ์ฒด๋ค์ ๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด๋ค ๊ฐ์ฒด๋ ์๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 4๊ฐ์ง ํน์ง
1. ์ถ์ํ (Abstraction)
๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ฌ๋ฌ ๊ฐ์ง ํน์ง ์ค์์ ํ๋ก๊ทธ๋๋ฐ์์ ์ฒ๋ฆฌํ ํน์ง๋ค์ ๋์ถํ๋ ๊ณผ์ .
์ถ์ํ๋ ๋ณต์กํ ์์คํ ์ ๋จ์ํํ์ฌ ์ค์ํ ๋ถ๋ถ์ ๊ฐ์กฐํ๊ณ ๋ถํ์ํ ๋ถ๋ถ์ ์จ๊ฒจ ํ๋ก๊ทธ๋จ์ ๊ฐ๋จํ๊ฒ ๋ง๋ ๋ค.
์ถ์ํ๋ ๊ฐ์ฒด๋ค์ด ๊ณตํต์ ์ผ๋ก ํ์๋ก ํ๋ ์์ฑ์ด๋ ๋์์ ํ๋์ ๋ถ๋ฅ(class)๋ก ์ ์ํ๋ ๊ฒ์ด๋ค.
์ถ์ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋๋ก ํํํ ๊ฒ์ด class๋ค. ๊ฐ์ฒด์ ํน์ง๊ณผ ์ํ๋ ์์ฑ์ผ๋ก ๊ตฌํํ๊ณ ๊ฐ์ฒด์ ๋์์ ๋ฉ์๋๋ก ๊ตฌํํํ๋ค.
2. ์บก์ํ (Encapsulation)
์บก์ํ๋ ์ฐ๊ด ์๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํ๋์ ์บก์(ํด๋์ค)๋ก ๋ฌถ์ด ํ์ฉํ๋ค.
์ถ์ํ์ ๋น๊ตํด๋ณด์๋ฉด, ์ถ์ํ๋ ๋์์ธ ๊ด์ / ์บก์ํ๋ ์ค์ ์ฝ๋๋ก ๊ตฌํํ๋ ๊ด์
์ ๊ทผ์ ์ด์(private/ public)์ ํตํด ๊ฐ์ฒด ์ธ๋ถ์์์ ์ ๊ทผ์ ์ ํํ์ฌ ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ ์ ๊ทผ ํต์ -> ์๋ํ
์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ค์ด๊ณ , ๊ฐ์ฒด ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ํธ ์์ฉ์ ๋จ์ํํ๋ค.
์บก์ํ๋ ์ ๋ณด ์๋ํ๋ฅผ ํตํด ๋์ ์์ง๋, ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๋๋ก ์ค๊ณํ๋ค.
ํ ๊ณณ์์ ๋ณํ๊ฐ ์ผ์ด๋๋ ๋ค๋ฅธ ๊ณณ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ผ ์ ์์ด ์ฝ๋๋ฅผ ๋ณดํธํ๊ณ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์๋ค.
* ์์ง๋ : ํด๋์ค๋ ๋ชจ๋ ์์ ์์๊ฐ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ์ ๋
* ๊ฒฐํฉ๋ : ์ด๋ค ๊ธฐ๋ฅ์ ์คํํ ๋ ๋ค๋ฅธ ํด๋์ค๋ ๋ชจ๋์ ์์กดํ๋ ์ ๋
3. ์์ (Inheritance)
๋ถ๋ชจ ํด๋์ค์ ํน์ฑ์ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฉํ๋ ๊ฐ๋ ์ด๋ค.
์์์ ๊ธฐ์กด ํด๋์ค์์ ์ ์๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ค๋ฅธ ํด๋์ค์์ ์ฌ์ฌ์ฉ/ ํ์ฅ์ ์ํด ์ฌ์ฉ๋๋ค.
4. ๋คํ์ฑ (Polymorphism)
๋คํ์ฑ์ ๊ฐ์ ๋ฉ์๋๋ ์ฐ์ฐ์๊ฐ ๋ค์ํ ๊ฐ์ฒด์์ ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ์ ํตํด ๋ฉ์๋๋ ํด๋์ค๋ฅผ ๋ค์ํ๊ฒ ๋์์ํจ๋ค.
-> ๋์ ๋ฐ์ธ๋ฉ / ๋ฉ์๋ ๋์คํจ์น
์ค๋ฒ๋ผ์ด๋ฉ (Overriding)
์์ ๊ด๊ณ์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ฌ์ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ
์ค๋ฒ๋ก๋ฉ (Overloading)
๋์ผํ ํจ์๋ ๋ฉ์๋ ์ด๋ฆ์ ๊ฐ์ง์ง๋ง ๋งค๊ฐ๋ณ์์ ํ์ , ๊ฐ์, ์์ ๋ฑ์ ๋ฐ๋ผ ๋ค์ํ ๋ฒ์ ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ