๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)
OOP๋ ๊ฐ์ฒด ๊ฐ๋ ์ ํ๋ก๊ทธ๋จ์ผ๋ก ํํํ๋ ๊ฒ์ด๋ฉฐ, ์์ฑ์ ๋ณ์, ํ๋์ ํจ์๋ก ํํ๋๋ค.
ํ์ด์ฌ ์ญ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ ์ธ์ด์ด๋ค.
OOP๋ ์ค๊ณ๋์ ํด๋นํ๋ ํด๋์ค(class)์ ์ค์ ๊ตฌํ์ฒด์ธ ์ธ์คํด์ค(instance, ๊ฐ์ฒด)๋ก ๋๋๋ค.
(ex. ํด๋์ค -> ๋ถ์ด๋นตํ, ์ธ์คํด์ค -> ๋ถ์ด๋นต)
๊ฐ์ฒด๋ ์์ฑ๊ณผ ํ๋์ ๊ฐ์ง๋ค. ๋ฐ์ดํฐ์ ์ฝ๋๋ฅผ ํฌํจํ๋ ์ปค์คํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์๋ฏธํ๋ค. ๊ฐ์ฒด๊ฐ ๊ฐ๋ณ ์ฌ๋ฌผ์ ๋ํ๋ธ๋ค๋ฉด ํด๋น ๋งค์๋๋ ๋ค๋ฅธ ์ฌ๋ฌผ๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ฐ์ฒด๋ ํ๋ผ์คํฑ ๋ฐ์ค, ํด๋์ค๋ ๋ฐ์ค๋ฅผ ๋ง๋๋ ํด์ด๋ผ๊ณ ๋น์ ํ ์ ์๋ค.
1. ํด๋์ค ์ ์ธ: class
class ํด๋์ค์ด๋ฆ(object):
โ class: class ์์ฝ์ด
โ object: ์์๋ฐ๋ ๊ฐ์ฒด๋ช (ํ์ด์ฌ3์์๋ ์์ ์ด๋ ์๋ ์์)
โ ํด๋์ค๋ช : ๋์ด์ฐ๊ธฐ๋ถ๋ถ์ ๋๋ฌธ์๋ฅผ ์ฐ๋ CamelCase๋ฐฉ์ ์ฌ์ฉ
์๋ฌด๋ ๋ง๋ ์ ์๋ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๋ฉด ๊ฐ์ฒด์ ํฌํจ๋ ๋ด์ฉ์ ๋ํ๋ด๋ ํด๋์ค๋ฅผ ์ ์ํ๋ค.
2. ์์ฑ (attributes)
์ผ๋ฐ์ ์ผ๋ก๋ ๊ฐ์ฒด ์์ฑ์ ์๋ฏธํ๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ๋ด๋ถ ๋ณ์๋ฅผ ์์ฑ์ด๋ผ๊ณ ํ๋ค. ๊ฐ์ฒด, ํด๋์ค๊ฐ ์์ฑ๋๋ ๋์์ด๋ ๊ทธ ์ดํ์ ํ ๋น ๊ฐ๋ฅํ๋ค. ํด๋์ค์ด๋ฆ ๋ค์ ์ ์ ์ฐ๊ณ ํ ๋นํ ์ ์๋ค.
3. ์ด๊ธฐํ ๋ฉ์๋: __init__()
๊ฐ์ฒด, ํด๋์ค์ ํจ์๋ฅผ ๋ฉ์๋๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด ์ด๊ธฐํ ์์ฝํจ์ __init__()์ ์ฌ์ฉํ์ฌ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ ์ ์๋ค. ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง ๋ ์๋์ผ๋ก ํธ์ถ๋๊ณ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ฐ๊ฒ ๋ ์ฌ๋ฌ ์ฑ์ง์ ์ ํด์ค๋ค.
__init__()์ ์ ์ํ ๋ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ self๊ฐ ์์ผ ํ๋ค. self๋ ๊ฐ๋ณ ๊ฐ์ฒด์ ์๊ธฐ์์ ์ ์ฐธ์กฐํ๊ฒ ํ๋ค.
๋ชจ๋ ํด๋์ค์์ __init__()์ ์ ์ํด์ผ ํ๋ ๊ฑด ์๋๋ค. __init__()๋ ํธ์ถ ์ ์ ์ด๋ฏธ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ๊ฐ์ ํด๋์ค์์ ์์ฑ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ํ์ํ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ๋ฅผ ์ํํ๋ค.
(self: ์์ฑ๋ instance ์์ )
โ ํ์ด์ฌ์์ __์ ์๋ฏธ:
ํน์ํ ์์ฝ ํจ์๋ ๋ณ์, ํจ์๋ช ๋ณ๊ฒฝ(๋งจ๊ธ๋ง)์ผ๋ก ์ฌ์ฉ
ex) __main__, __str__, __eq__
4. ์์
๋ถ๋ชจ ํด๋์ค๋ก ๋ถํฐ ์์ฑ๊ณผ method๋ฅผ ๋ฌผ๋ ค๋ฐ์ ์์ ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.
๊ธฐ์กด ํด๋์ค์์ ์ผ๋ถ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ์ฌ ์ ํด๋์ค๋ฅผ ์์ฑํ ์ ์๋ค. ์๋ก์ด ํด๋์ค๊ฐ ๊ธฐ์กด ํด๋์ค๋ฅผ ๋ณต์ฌํ์ง ์์ ์ฑ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋งค์ฐ ํจ๊ณผ์ ์ด๋ค.
1) ๋ถ๋ชจ ํด๋์ค ์์๋ฐ๊ธฐ
๊ธฐ์กด ํด๋์ค: ๋ถ๋ชจ, ์ํผ, ๋ฒ ์ด์ค ํด๋์ค
์ ํด๋์ค: ์์, ์๋ธ, ํ์๋ ํด๋์ค
์์ ํด๋์ค์ ๊ดํธ ์์ ๋ถ๋ชจ ํด๋์ค์ด ์ด๋ฆ์ ์ง์ ํ๋ค. issubclass() ํจ์๋ก ๋ค๋ฅธ ํด๋์ค์์ ํ์๋ ํด๋์ค์ธ์ง ํ์ธํ ์ ์๋ค.
#๋ถ๋ชจ ํด๋์ค
class Car():
def exclaim(self):
print("I'm a Car!")
#์์ ํด๋์ค
class Yujo(Car):
pass
2) ๋งค์๋ ์ค๋ฒ๋ผ์ด๋(๋์ฒด)
3) ๋งค์๋ ์ถ๊ฐ
4) ๋ถ๋ชจ ํด๋์ค์๊ฒ ๋์๋ฐ๊ธฐ: super()
์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ํธ์ถํ ๋ super()๋ฅผ ์ฌ์ฉํ๋ค. super() ๋ฉ์๋๋ ๋ถ๋ชจ ํด๋์ค์ ์ ์๋ฅผ ์ป๋๋ค.
super() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ํด๋์ค์ ์ ์๊ฐ ๋์ค์ ๋ฐ๋ ๋ ์์๋ฐ์ ์์ ํด๋์ค์ ์์ฑ๊ณผ ๋งค์๋์๋ ๋ฐ์๋๋ค๋ ์ฅ์ ์ด ์๋ค.
5) ๋ค์ค ์์: ๊ฐ์ฒด๋ ์ฌ๋ฌ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ์ ์ ์๋ค.
6) ๋ฏน์ค์ธ
๋ฏน์ค์ธ ํด๋์ค๋ ๋ค๋ฅธ ์์ ํด๋์ค์ ๋งค์๋๋ฅผ ๊ณต์ ํ์ง ์์ผ๋ฉฐ ๋งค์๋ ํด์ ์์์ ๋ชจํธ์ฑ์ ํผํ ์ ์๋ค. ๋ค๋ฅธ ํด๋์ค์์ ์ฌ์ฌ์ฉํ ์์ฑ์ด๋ ๋ฉ์๋๋ฅผ ๋ฌถ์ด ๋์ ํด๋์ค์ด๋ค.
4. ๋คํ์ฑ (Polymorphism)
๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋์ ๋ด๋ถ ๋ก์ง์ ๋ค๋ฅด๊ฒ ์์ฑ
ํ์ด์ฌ์์๋ ์ฃผ๋ก ๊ฐ์ ๋ถ๋ชจ ํด๋์ค์ ์์์์ ์ฃผ๋ก ๋ฐ์
์ค์ํ OOP๊ฐ๋ ์ด์ง๋ง ๊น์ด ์ ํ์ ์๋ค.
โปprivate ๋ณ์ (์ธ๋๋ฐ 2๊ฐ) : self.__items = [] -> ํ๊ฐ์ฒด๊ฐ ์ ๊ทผ ๋ชปํจ
5. ๋ฐ์ฝ๋ ์ดํฐ(decorator)
first-class object : ์ผ๊ธ ํจ์, ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํ ๋น์ด ๊ฐ๋ฅํ ๊ฐ์ฒด,
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ์ด ๊ฐ๋ฅ + ๋ฆฌํด๊ฐ์ผ๋ก ์ฌ์ฉ
ํ์ด์ฌ ํจ์๋ ์ผ๊ธ ํจ์
inner-product: ํจ์ ๋ด์ ๋ ๋ค๋ฅธ ํจ์๊ฐ ์กด์ฌ (ํํ ๊ตฌ์กฐ)
closures: inner fuction์ ๋ฆฌํด ๊ฐ์ผ๋ก ๋ฐํ
decorator function @ : ๋ณต์กํ ํด๋ก์ ธ ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ ๋ค.
์ฐธ๊ณ ๋ฐ ์ถ์ฒ: ์ฒ์ ์์ํ๋ ํ์ด์ฌ(๋น ๋ฃจ๋ฐ๋ก๋, ํ๋น๋ฏธ๋์ด)
'Python > ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๐[ํ์ด์ฌ] Hash, Hash Map, Hash Set (0) | 2025.03.20 |
|---|---|
| ๐ [ํ์ด์ฌ] ๋ฐฐ์ด(List) (0) | 2025.03.20 |
| [Python] ํจ์ (0) | 2021.09.22 |
| [Python] ๋์ ๋๋ฆฌ์ ์ (0) | 2021.09.12 |
| [Python] ํํ๊ณผ ๋ฆฌ์คํธ (0) | 2021.09.12 |