1. ํด๋์ค์ ๊ฐ์ฒด
- ํด๋์ค๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํ๋์ ์ ์ํ๋ค
- ๊ฐ์ฒด์ ํด๋์ค๋ ์ด๊ธฐํ๋ฅผ ํตํด ์ ์ดํ๋ค. (__init__)
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ, ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์๋ค๋ ์ฅ์ ์กด์ฌ
1.1 ํ์ด์ฌ์์ ๋ณด๋ ํด๋์ค์ ๊ฐ์ฒด์ ํํ
class Cookie:
pass
- ์ด ํด๋์ค๋ ์๋ฌด ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์ง ์์ ๊ป๋ฐ๊ธฐ๋ฟ์ธ ํด๋์ค
a = Cookie()
b = Cookie()
- Cookieํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์ ๊ฐ๋ค.
- Cookie()์ ๊ฒฐ๊ด๊ฐ์ ๋ฐ๋ a์ b๊ฐ ๋ฐ๋ก ๊ฐ์ฒด๊ฐ ๋๋ค.
1.2 ์ฌ์น์ฐ์ฐ ํด๋์ค ๋ง๋ค์ด๋ณด๊ธฐ
ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ ์๋, ์ด๋ค ๊ตฌ์กฐ๋ก ๋ง๋ค์ง ์๊ฐ์ ์ฐ์ ์ ์ผ๋ก ํ๋๊ฒ ์ข๋ค.
- a = FourCal()
- a.setdata(4,2)
- print(a.add()) --> ๊ฒฐ๊ณผ: 6
- print(a.mul()) --> ๊ฒฐ๊ณผ: 8
์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ a๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ๋ ๊ฒ ๋ฃ์ ๊ฒ์ด๋ฉฐ, ์ํ๋ ๊ฒฐ๊ณผ๋ ์์ ๊ฐ์ด ์ถ๋ ฅ๋๊ฒ ๋ง๋ค๊ณ ์ ํ๋ค. ์ด๋ ๊ฒ ๋จผ์ ์ด๋ค ํํ๋ก ํด๋์ค๋ฅผ ๊ตฌ์ถํด์ผํ๋์ง ๊ตฌ์กฐ ๋จผ์ ๋จธ๋ฆฟ์์ ๋ ์ฌ๋ฆฌ๊ณ ํด๋์ค๋ฅผ ํ์ฑํ๋ ๊ฒ์ด ๋์์ด ๋๋ค๊ณ ํ๋ค.
1.2.1 ํด๋์ค ๊ตฌ์กฐ ๋ง๋ค๊ธฐ
a = FourCal() ์ด๋ผ๊ณ a๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ ํ๋ค. ๋ฐ๋ผ์ ํด๋์ค๋ ์๋์ ๊ฐ์ด ์ ์ํ๋ค.
class FourCal:
pass
์ฌ๊ธฐ์ ์ฐธ๊ณ !! ๊ฐ์ฒด์ ์ธ์คํด์ค์ ์ฐจ์ด ์์๋ณด๊ธฐ
- ์ธ์คํด์ค : ํด๋์ค๋ก ๋ง๋ ๊ฐ์ฒด
- ์ฆ, a = FourCal()์ผ ๋
- a๋ ๊ฐ์ฒด์ด์, FourCal() ํด๋์ค์ ์ธ์คํด์ค ๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
1.2.2 ๊ฐ์ฒด์ ์ซ์ ์ง์ ํ ์ ์๊ฒ ๋ง๋ค๊ธฐ
a.setdata(4,2) ํด๋น ๊ณผ์ ์ ๋ง๋ค๊ณ ์ ํ๋ค. a๋ผ๋ ๊ฐ์ฒด์ (4,2) ๋ผ๊ณ ์ซ์๋ฅผ ์ง์ ํ ์ ์๋๋ก ๋ง๋ค๊ณ ์ ํ๋ค.
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
setdata ํจ์๋ฅผ ๋ง๋ค์๋ค. ์ด๋ ๊ฒ ํด๋์ค ์์ ๊ตฌํ๋ ํจ์๋ฅผ '๋ฉ์๋'๋ผ๊ณ ๋งํ๋ค. ์ฌ๊ธฐ์ ๋งค๊ฐ๋ณ์๋ฅผ self, first, second ์ธ๊ฐ๋ฅผ ๋ฐ๋๋ฐ, self๋ ๋ฌด์์ผ๊น? ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ๋งค๊ฐ๋ณ์๊ฐ 3๊ฐ์ด๋ฉด, 3๊ฐ์ ์๋ฅผ ์ ๋ฌํด์ฃผ์ด์ผ ํ๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ setdata(4,3) ์ด๋ ๊ฒ ๋๊ฐ์ ์๋ง ์ ๋ฌํด ์ฃผ์๋ค.
- self
- ํด๋์ค์์ self๋ ๊ฐ์ฒด ์์ ์ ๋ถ๋ฌ์ค๋๋ก ์ค์ ๋์ด์๋ค.
- ๋ฐ๋ผ์ ํด๋น a.setdata(4,2)๋ฅผ ์ํํ๋ฉด, self์๋ ๊ฐ์ฒด ์๊ธฐ์์ ์ธ 'a'๊ฐ ์๋์ผ๋ก ์ ๋ฌ๋๋ค.
1.2.3 ๋ํ๊ธฐ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
์ด์ a.add()๋ฅผ ํ์ ๋ ์ ๋ ฅ ๋๋ ๋ ์๊ฐ ๋ํด์ง๋ ๋ฉ์๋๋ฅผ ํด๋์ค์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. a๋ ํ์ฌ FourCal์ ์ธ์คํด์ค์ด๋ฉฐ, first ๋ณ์์ 4๊ฐ, second ๋ณ์์ 2๊ฐ ๋ค์ด๊ฐ ์๋ ์ํ์ด๋ค.
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
add ๋ฉ์๋๋ฅผ ์๋กญ๊ฒ ์ถ๊ฐํ๋ค. a.setdata(4,2)๋ก first ์ second์ ๋ณ์๋ฅผ ์ด๊ธฐํ ์์ผ์ค ํ, a.add()๋งค์๋๋ฅผ ์งํ์์ผ์ฃผ๋ฉด ์๋์ผ๋ก self ๋ถ๋ถ์ a ๋ผ๋ ๊ฐ์ฒด๊ฐ ๋์ด๊ฐ๊ฒ ๋๋ฉด์ add๊ธฐ๋ฅ์์ first์ second์ ์๋ง์ ๋ณ์๊ฐ ์ง์ ๋๊ณ ๋ง์ ์ ์ํํ๊ฒ ๋๋ค.
1.2.4 ๋๋จธ์ง ์ฌ์น์ฐ์ฐ ๋ฉ์๋ ์์ฑํ๊ธฐ
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด ์ฌ์น์ฐ์ฐ ํด๋์ค ForCal ์ ์์ฑํ๊ฒ ๋๋ค.
2. ์์ฑ์ (Constructor)
์ฐ๋ฆฌ๋ setdata๋ผ๋ ๋งค์๋๋ฅผ ํด๋์ค ๋ด๋ถ์ ์๋กญ๊ฒ ๋ง๋ค์ด ์ฃผ๋ฉด์ ์๋ฅผ ์ง์ ํด ์ฃผ์๋ค. ์ด๋ ๊ฒ ํ๋ค ๋ณด๋ฉด, FourCal ํด๋์ค๋ setdata ๋ฉ์๋๋ฅผ ์ํํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
a = FourCal()
a.add()
์ด๋ ๊ฒ ์งํํ๊ฒ ๋ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ์ถ๋ ฅ๋๋ค.
๊ผญ setdata ๋ฉ์๋๋ฅผ ์ํํด์ผ๋ง first ์ second ๋ณ์๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์์ฑ์๊ฐ ํ์ํ ์ด์ ?
์ด๋ ๊ฒ ๊ฐ์ฒด์ ์ด๊น๊ฐ์ ์ค์ ํด์ผํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ์๋ setdata์ฒ๋ผ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๊น๊ฐ์ ์์ฑํ๋ ๊ฒ๋ณด๋ค๋ '์์ฑ์'๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ผ๊ณ ํ๋ค. ์์ฑ์๋, ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค.
์์ฑ์ ๋ฉ์๋์ ์ด๋ฆ์ __init__ ์ด๋ค. ์ฌ์น์ฐ์ฐ FourCalํด๋์ค์ ์์ฑ์๋ฅผ ์ถ๊ฐํด๋ณด์!
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
- __init__ ๋ฉ์๋๋ setdata ๋ฉ์๋์ ์ฐจ์ด๊ฐ ์์ด ๋ณด์ด์ง๋ง, __init__ ๋ฉ์๋๋ ๋ฐ๋ก ํธ์ถํด์ฃผ์ง ์์๋ ์์ฑ์๋ก ์ธ์๋์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์ ์ ์๋์ผ๋ก ํธ์ถ๋๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
์ด๋ ๊ฒ __init__์์ฑ์๊ฐ ์์ฑ์ด ๋์๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์๋์ผ๋ก first/second ๋ณ์๋ก ์ซ์๊ฐ ์ ๋ฌ๋๋ค.
a = FourCal(4,2)
- ํ์ง๋ง ์ด์ ์ฒ๋ผ a = FourCal() ๋ผ๊ณ ๋ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด, first์ second์ ๋ค์ด๊ฐ ๋ณ์๊ฐ ์ง์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๊ฐ์ฒด ์์ฑ๊ณผ ๋์์ __init__ ๋ฉ์๋๊ฐ ํธ์ถ๋จ์ ๊ธฐ์ตํ๋ฉฐ __init__ ๋ฉ์๋ ๋งค๊ฐ๋ณ์์ ๋ง๋ ๋ณ์๋ฅผ ์ง์ ํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๋๋ก ํ์.
3. ํด๋์ค์ ์์
์์์ด๋, ์ด๋ค ํด๋์ค๋ฅผ ๋ง๋ค ๋ ๋ค๋ฅธ ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ์ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ณดํต ์์์ ๊ธฐ์กด ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๋ ค๊ณ ์ฌ์ฉํ๋ค. ์์ ๋ง๋ FourCal ํด๋์ค๋ฅผ ์์ํ๋ MoreFourCal ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด์. ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค
class MoreFourCal(FourCal):
pass
- class ํด๋์ค์ด๋ฆ (์์ํ ํด๋์ค์ด๋ฆ) ์ผ๋ก ์์ฑํ ์ ์๋ค.
- MoreFourCal์ FourCal ํด๋์ค๋ฅผ ์์๋ฐ์์ผ๋ฏ๋ก, FourCal ๋ด๋ถ์ ์๋ ๋ชจ๋ add, mul, sub, div ๊ธฐ๋ฅ์ ์ํํ ์์๋ค.
a = MoreFourCal(4,2)
a.add()
##๊ฒฐ๊ด๊ฐ => 6
3.1 a์ b์ ๊ณฑ์ ๊ณ์ฐํ๋ MoreFourCal ํด๋์ค๋ฅผ ๊ตฌํํด๋ณด์.
class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
a = MoreFourCal(4,2)
a.pow()
##๊ฒฐ๊ด๊ฐ ==> 16
FourCal ํด๋์ค๋ฅผ ์์๋ฐ์์ผ๋ฏ๋ก ๋ฐ๋ก ์์ฑ์๊ฐ ํ์ํ์ง ์๋ค. FourCal ํด๋์ค ๋ด๋ถ์์๋ ์์ฑ์๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ FourCal ๋ด๋ถ์ ์๋ ๊ธฐ๋ฅ์ ๋ฌผ๋ก MoreFourCal ๋ด๋ถ์ ์๋ ๋ฉ์๋๊น์ง ์ํ ๊ฐ๋ฅํ ํํ์ ํด๋์ค๊ฐ ๋๋ ๊ฒ์ด๋ค.
4. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ (overriding)
a = FourCal(4, 0)
a.div()
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ ์ด์ ๋ 4๋ฅผ 0์ผ๋ก ๋๋๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ ์ค๋ฅ๊ฐ ๋๋ ์ฝ๋๋ฅผ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ๊ฑด๋ค์ด์ง ์๊ณ ์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด ์์๊น?
๋ฐ๋ก ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ์ฉํ๋ฉด ๋๋ค. ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ง๊ทธ๋๋ก ๋ฎ์ด์ฐ๊ธฐ๋ผ๋ ๊ธฐ๋ฅ์ด๋ผ๋ ๋ป์ด๋ฉฐ, ์์์ ํ์ฉํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
class SafeFourCal(FourCal): # FourCal์ด ๋ถ๋ชจํด๋์ค ์ด๋ค.
def div(self):
if self.second == 0: # ๋๋๋ ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ 0์ ๋ฆฌํดํ๋๋ก ์์
return 0
else:
return self.first / self.second
SafeFourCal ์ FourCal์ ๋ถ๋ชจํด๋์ค๋ก ๊ฐ๊ณ ๋ถ๋ชจํด๋์ค์ ๋ฉ์๋๋ฅผ ์์๋ฐ๋๋ค. ํ์ง๋ง ์ฝ๋๋ฅผ ํ์ด๋ณด๋ฉด FourCal ๋ด๋ถ์ ์๋ div ๋ฉ์๋์ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์๊ฐ? ์ด๋ฐ๊ฒ์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด๋ผ๊ณ ํ๋ค. (๋ถ๋ชจ ํด๋์ค ๋ด๋ถ์ ์๋ ๋ฉ์๋์ ๋์ผํ ๋ฉ์๋๋ฅผ ๊ฐ๋ ์์ ํด๋์ค)
์ด๋ด ๋์๋, ๋ถ๋ชจ ํด๋์ค์ ์๋ div ๋ฉ์๋๊ฐ ์๋ ์์ํด๋์ค์ ์๋ div ๋ฉ์๋๊ฐ ์๋์ผ๋ก ์คํ๋๋ค.
a = SafeFourCal(4, 0)
a.div()
## ๊ฒฐ๊ด๊ฐ => 0
์ฐธ๊ณ ) https://wikidocs.net/28
์ฐธ๊ณ ) https://wikidocs.net/16071
์ฐธ๊ณ ) https://zzsza.github.io/development/2020/07/05/python-class/
'potato's Dev Note > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ์ด์ฌ ๋ฆฌ์คํธ ๋น๊ตํ๊ธฐ (set ์๋ฃํ ์ด์ฉํ๊ธฐ!) (2) | 2021.08.18 |
---|---|
[python3] itertools ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ง๋๋ ํจ์ ์ข ๋ฅ ์ดํด๋ณด๊ธฐ (0) | 2021.08.04 |