Language/Python

[Python] ํด๋ž˜์Šค

Ella_K 2022. 7. 14. 00:15

๐Ÿ”ฅ ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

  • ํด๋ž˜์Šค(Class) : ๊ฐ์ฒด(object)๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ํ‹€, ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ(๊ฐ์ฒด ๋‚ด์— ์ •์˜๋œ ํ•จ์ˆ˜)๋ฅผ ์ •์˜ํ•˜๋Š” ํ‹€ 
  • ๊ฐ์ฒด(Object) : ํ‹€์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฒƒ. ํด๋ž˜์Šค์˜ instance๋ผ ๋ถ€๋ฅธ๋‹ค.
  • 1๊ฐœ์˜ ํด๋ž˜์Šค๋Š” ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
class Calculator:
  pass

cal1 = Calculator()
cal2 = Calculator()

print(type(cal1)) # <class '__main__.Calculator'>
print(cal1 == cal2) # False
๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

Calculator()์˜ ๊ฒฐ๊ด๊ฐ’์„ ๋Œ๋ ค๋ฐ›์€ cal1๊ณผ cal2๋Š” ๊ฐ์ฒด์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  cal1๊ณผ cal2 ๊ฐ์ฒด๋Š” Calculator์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

์ธ์Šคํ„ด์Šค๋ผ๋Š” ๋ง์€ ํŠน์ • ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ์ง€ ๊ด€๊ณ„ ์œ„์ฃผ๋กœ ์„ค๋ช…ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

'cal1์€ ๊ฐ์ฒด'
'cal1๋Š” Calculator์˜ ์ธ์Šคํ„ด์Šค'

 

๐Ÿ”ฅ ํด๋ž˜์Šค ๊ธฐ๋ณธ ๊ตฌ์„ฑ์š”์†Œ

class Calculator:
  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
ํด๋ž˜์Šค ๋‚ด ํ•จ์ˆ˜ setdata๋กœ ๊ฐ์ฒด์—์„œ ๊ณ„์‚ฐ์— ์“ฐ์ด๋Š” ๋‘ ์ˆซ์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
add, mul, sub, div ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ ๋”ํ•˜๊ธฐ, ๊ณฑํ•˜๊ธฐ, ๋นผ๊ธฐ, ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๐Ÿ‘‰ ๋ฉ”์„œ๋“œ (method)

  • ํด๋ž˜์Šค ๋‚ด์— ์ •์˜๋œ ํ•จ์ˆ˜(setdata, add, mul, sub, div)๋ฅผ ๋ฉ”์„œ๋“œ(method)๋ผ ํ•œ๋‹ค.

 

๐Ÿ‘‰ Self

  • ์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋‘ ' self '๋ฅผ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.
  • ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ๋‹ค
  • ํ˜ธ์ถœํ•œ ๊ฐ์ฒด ์ž์‹ ์ด ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๊ด€๋ก€์ ์œผ๋กœ ' self '๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
a = Calculator()
a.setdata(4,2)
๊ฐ์ฒด a ๋Š” setdata์˜ self ๋งค๊ฐœ๋ณ€์ˆ˜์—, ์ž…๋ ฅ๊ฐ’ 4๋Š” first ๋งค๊ฐœ๋ณ€์ˆ˜์—, ์ž…๋ ฅ๊ฐ’ 2๋Š” second ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ๋‹ค.

 

๐Ÿ‘‰ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

  • ์ธ์Šคํ„ด์Šค์™€ ๊ฐ์ฒด๋Š” ๋™์ผํ•˜๋‹ค. ์•„๋ž˜์˜ ์„ค๋ช…์—์„œ ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค. 
  • ํด๋ž˜์Šค ๋‚ด์˜ ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ' self.์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜ = ๊ฐ’ ' ์œผ๋กœ ์ž‘์„ฑ๋œ ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค. ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ํด๋ž˜์Šค ๋‚ด์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š”  (๊ฐ์ฒด๊ฐ€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐ์ฒด๊ฐ€ ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌ๋˜๋ฏ€๋กœ)  self.์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•œ๋‹ค.
a = Calculator()
a.setdata(4,2)

print(a.first) # 4
print(a.second) # 2
print(type(a.first)) # <class 'int'>
๊ฐ์ฒด a๊ฐ€ setdata๋ฅผ ํ˜ธ์ถœํ•ด a์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ first, second๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

 

  • ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋งˆ๋‹ค ๋…๋ฆฝ์ ์ด๋‹ค. (์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ด๋‹ค.)
b = Calculator()
b.setdata(3,6)

a.first = 7
print(a.first) # 7
print(b.first) # 3
๊ฐ์ฒด a์˜ first ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ๊ฐ์ฒด b์˜ first ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
a์˜ first์™€ b์˜ first๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์ด๋‹ค.

 

  • ๊ฐ์ฒด์ด๋ฆ„.๋ณ€์ˆ˜์ด๋ฆ„ = ๊ฐ’ ํ˜•ํƒœ๋กœ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
a.calculator_name = 'cal1'

 

๐Ÿ‘‰ ํด๋ž˜์Šค ๋ณ€์ˆ˜

  • ๊ฐ™์€ ํด๋ž˜์Šค๋กœ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์— ๊ณต์œ ๋œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜์ด๋‹ค.
class Team_member:
  team_name = 'MMM'

  def member_name(self, first, second):
    self.first = first
    self.second = second

amy = Team_member()
amy.member_name('Amy', 'Kim')
tom = Team_member()
tom.member_name('Tom','Kang')

print(Team_member.team_name) # MMM
print(amy.team_name) # MMM
print(tom.team_name) # MMM

Team_member.team_name = 'WWW'
print(Team_member.team_name) # WWW
print(amy.team_name) # WWW
print(tom.team_name) # WWW

 

  • ํด๋ž˜์Šค ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ–๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด๋„ ํด๋ž˜์Šค ๋ณ€์ˆ˜์™€๋Š” ์•„๋ฌด ์ƒ๊ด€์—†๋‹ค.
amy.team_name = 'YB'
print(Team_member.team_name) # WWW
print(tom.team_name) # WWW
print(amy.team_name) # YB
ํด๋ž˜์Šค Team_member์˜ team_name ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ amy ๊ฐ์ฒด์— team_name ์ด๋ผ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ' ๊ฐ์ฒด์ด๋ฆ„.ํด๋ž˜์Šค๋ณ€์ˆ˜ ' ๋กœ ์ ‘๊ทผํ•˜๋ฉด, ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ  ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ์€ํ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ' ํด๋ž˜์Šค์ด๋ฆ„.ํด๋ž˜์Šค๋ณ€์ˆ˜ ' ๋กœ ์ ‘๊ทผํ•˜์ž.

 

๐Ÿ‘‰ ์ƒ์„ฑ์ž (Constructor)

  • ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์œผ๋กœ __init__ ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ์ฃผ๋กœ __init__ ์•ˆ์— ์ •์˜๋˜๊ณ , ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
class Calculator:
  def __init__(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

a = Calculator(4,2)
print(a.first) # 4
print(a.second) # 2
print(a.add()) # 6

 


๐Ÿ”ฅ ์ƒ์†

๐Ÿ‘‰ ์ƒ์† ๊ตฌ์กฐ

  • ํด๋ž˜์Šค์—์„œ ์ƒ์†์ด๋ž€ ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • class ํด๋ž˜์Šค์ด๋ฆ„(์ƒ์†ํ•  ํด๋ž˜์Šค ์ด๋ฆ„) 
class MoreCal(Calculator):
  pass
  
c = MoreCal(5,2)
print(c.add()) # 7
print(c.sub()) # 3
print(c.mul()) # 10
print(c.div()) # 2.5
MoreCal ํด๋ž˜์Šค๋Š” Calculator ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
Calculator๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค, MoreCal์ด ์ž์‹ ํด๋ž˜์Šค์ด๋‹ค.

[ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ]
๊ธฐ์กด ํด๋ž˜์Šค๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ํด๋ž˜์Šค ์ˆ˜์ •๊ณผ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ƒ์†์„ ์ด์šฉํ•ด ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ, ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

๐Ÿ‘‰ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

  • ๊ธฐ์กด class์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
class MoreCal(Calculator):
  def pow(self):
    result = self.first ** self.second
    return result
  
c = MoreCal(5,2)
print(c.pow()) # 25

 

๐Ÿ‘‰ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ (๋ฉ”์„œ๋“œ ์ˆ˜์ •)

  • ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ: ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
class SafeCal(Calculator):
  def div(self):
    if self.second == 0:
      return 0
    else:
      return self.first/self.second

 


Source