Python 30์ผ๐Ÿ‘จโ€๐Ÿ’ป - 8์ผ์ฐจ-OOP ๊ธฐ๋ณธ ์‚ฌํ•ญ

14207 ๋‹จ์–ด pythonchallenge
ํŒŒ์ดํ†ค์€ ๋‹ค๋ฒ”์‹ ์–ธ์–ด๋‹ค.์ด ๋‹จ์–ด๋Š” ๋“ฃ๊ธฐ์— ๋งค์šฐ ๋ฉ‹์žˆ๋‹ค!JavaScript ์˜์—ญ์—์„œ ์™”๋Š”๋ฐ, ๋‚˜๋Š” ์ด ์ ์„ ๊นจ๋‹ฌ์•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด JavaScript๋„ ๋‹ค๋ฒ”์‹ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํŒŒ์ดํ†ค์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•œ ์‚ฌ๊ณ ๋ฐฉ์‹๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.์™œ ์ด๊ฒŒ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?
ํ˜„์‹ค ์„ธ๊ณ„์—์„œ ํ˜„์‹ค ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋งค์šฐ ๋ณต์žกํ•˜๋‹ค. ์‹ฌ์ง€์–ด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๋Œ€๋Ÿ‰์˜ ๋‘๋‡Œ ํญํ’์ด ํ•„์š”ํ•˜๋‹ค.
์šฐ์ˆ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ฝ”๋“œ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ณ , ํ•„์š”ํ•  ๋•Œ ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๊ณ , ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๊ฐ€ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฐ€๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
์ด๋Ÿฐ ๊ตฌ์กฐ์™€ ์กฐ์ง ์ฝ”๋“œ์˜ ๋ฐฉ์‹์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ๋ชจ๋ธ๊ณผ ๊ฐ™๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฐ ๊ทœ์น™์„ ๋”ฐ๋ผ ํ˜ผ๋ž€์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ๋˜‘๋˜‘ํ•ด์ง€๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์ž์‹ ๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.
๋งŒ์•ฝ ๋ช…ํ™•ํ•œ ๋ชจ๋ธ์ด ์—†๋‹ค๋ฉด, ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค!
ํŒŒ์ดํ†ค์œผ๋กœ ๋Œ์•„๊ฐ€์ž!
ํŒŒ์ดํ†ค์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ํ•˜๋‚˜์˜ ๋Œ€์ƒ์ด๋‹ค.๋‚ด๊ฐ€ ์—ฐ๊ตฌํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ๋ชจ๋‘ ๋Œ€์ƒ์ด๋‹ค. ๊ทธ๋“ค์€ ๋ชจ๋‘ ์ž์‹ ์˜ ๊ด€๋ จ ์†์„ฑ๊ณผ ์ผ๋ถ€ ์กฐ์ž‘์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.์ด ๋Œ€์ƒ๋“ค์€ ์‹ค๋ก€๋กœ ๊ทธ๊ฒƒ๋“ค์˜ ํด๋ž˜์Šค์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค.
์ด๊ฒƒ์€ Python์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ์ •์˜๋œ ๊ตฌ์กฐ๋‚˜ ์›ํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๊ทธ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์˜ ๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์ •์˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
print(type(2)) # <class 'int'>
print(type(2.5)) # <class 'float'>
print(type('Python')) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type({})) # <class 'dict'>
print(type([])) # <class 'list'>
print(type(())) # <class 'tuple'>
print(type(None)) # <class 'NoneType'>
๋‚ด์žฅ๋ฅ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž๋™์ฐจ, ๊ธฐ๊ณ„, ์ธ๊ฐ„, ๋™๋ฌผ ๋˜๋Š” ๊ทธ ์–ด๋– ํ•œ ๊ฒƒ๋„ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‹ค์ฒด์™€ ๊ทธ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ฝ”๋“œ์˜ ์œ ํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์€ ๋Œ€์ƒ์„ ๋Œ€์ƒ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋Š์Šจํ•œ ์ •์˜๋กœ ์—ฌ๊ฒจ์งˆ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๋Œ€์ƒ๋“ค์€ ์‹ค์ œ ์„ธ๊ณ„์˜ ๊ธฐ๋Šฅ์„ ๋ชจ์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋Œ€์ƒ๊ณผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
JavaScript ์„ธ๊ณ„์—์„œ๋„ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋น„๋ก JS์˜ ํด๋ž˜์Šค๊ฐ€ ES6์—์„œ ๋„์ž…ํ•œ ์›ํ˜• ํ•จ์ˆ˜ ์œ„์— ๋ฌธ๋ฒ• ์„คํƒ•๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ.)๊ทธ๋ž˜์„œ ๋‚ด ์‹ฌ์ง€ ๋ชจ๋ธ์—์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค ์‚ฌ์ด์— ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ดํ†ค์—์„œ OOP์˜ ์‹ค์ œ ์‘์šฉ์„ ๋ณด๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ๊นŠ์ด ์—ฐ๊ตฌํ•˜๊ณ  ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
class Avenger:
  def __init__(self, name):
    self.name = name

  def fight(self):
    print('๐Ÿ‘Š')

spiderman = Avenger('Spiderman')

print(type(Avenger)) # <class 'type'>
print(type(spiderman)) # <class '__main__.Avenger'> --> instance of Avenger
ํŒŒ์ดํ†ค์—์„œ ํด๋ž˜์Šค์˜ ๋ช…์นญ ์•ฝ์ •์€ ๋‚™ํƒ€ ๋ด‰์˜ ๋Œ€์†Œ๋ฌธ์ž์™€ ๋‹จ์ˆ˜ ๋ช…์นญ์ด๊ณ  ๋ณ€์ˆ˜๋Š” ๋ฑ€ ๊ป์งˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.__init__๋Š” ์ผ์ข…์˜ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•(๊ตฌ์กฐ ํ•จ์ˆ˜ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค)์ด๋‹ค.์ด๊ฒƒ์€ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.์œ„์˜ ํด๋ž˜์Šค์—์„œname์ด ์ดˆ๊ธฐํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, JavaScript์—์„œ๋Š” ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ ํ•จ์ˆ˜์—์„œ ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.self๋Š” ํŒŒ์ดํ†ค์˜ ํ‚ค์›Œ๋“œ๋กœ ํด๋ž˜์Šค ์‹ค๋ก€์— ๋Œ€ํ•œ ์ธ์šฉ์ด๋‹ค.์ด๊ฒƒ์€ ์ ‘๊ทผ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ์†์„ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.๋‚ด ์‹ฌ์ง€ ๋ชจ๋ธ์—์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธthis ํ‚ค์›Œ๋“œ์™€ ๋น„๊ตํ–ˆ๋‹ค.
์–ด๋ฒค์ ธ์Šค์—์„œ'์ „ํˆฌ'๋Š” ์–ด๋ฒค์ ธ์Šค๊ฐ€ ์ „ํˆฌ๋ฅผ ์š”๊ตฌ๋ฐ›์„ ๋•Œ ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฐ€์ƒ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.์—ฌ๊ธฐ์„œ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜๋งŒ ์ธ์‡„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์–ด๋–ค ๋™์ž‘์ด๋“  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๋ณต์ˆ˜์ž๋ฅ˜๋ฅผ ์›ํ˜•์œผ๋กœ ์‚ผ์•„ ์ŠคํŒŒ์ด๋”๋งจ ๋Œ€์ƒ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์ข…๋ฅ˜๋Š” ๋‹ค๋ฅธ ๋ณต์ˆ˜์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋‘๊ฐ€ ๋˜‘๊ฐ™์€ ์ผ์„ ํ•  ๊ฒƒ ๊ฐ™์•„์„œ ๊ทธ๋“ค์—๊ฒŒ ์‹ธ์šฐ๋ผ๊ณ  ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์ฟจํ•˜์ง€ ์•Š๋‹ค.
class Avenger:
  def __init__(self, name, weapon):
    self.name = name
    self.weapon = weapon

  def fight(self):
    print(self.weapon)

spiderman = Avenger('Spiderman', 'dispatch a web')
thor = Avenger('Thor', 'thunder attack')

spiderman.fight() # dispatch a web
thor.fight() # thunder attack
์ด์ œ ์ข€ ๊ดœ์ฐฎ์•„์กŒ์–ด์š”.๋ณต์ˆ˜์ž๋งˆ๋‹ค ๋…ํŠนํ•œ ํผํฌ๋จผ์Šค๊ฐ€ ์žˆ๋‹ค!์ด๊ฒƒ์€ ๊ฐ„๋‹จํ•œ ์œ ํ˜•์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋กœ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ฑ„์›Œ ๋ณต์ˆ˜์ž๋ฅผ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋Œ€์ƒ์„ ์‹ค๋ก€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค ๊ตฌ์กฐ ํ•จ์ˆ˜ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” __init_๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๋•Œ๋งŒ ๋Œ€์ƒ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ธฐ๋ณธ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜๋„ ๋งŽ์ด ์ œ๊ณตํ•œ๋‹ค.
class MotorBike:
  def __init__(self, brand, age):
    if(age <= 15):
      self.brand = brand
      self.age = age

  def start(self):
    print(f'starting {self.brand}....')

bullet = MotorBike('Royal Enfield Bullet',20)
bullet.start() # error. object is created only if age is less than or equals 15

์ฝ”๋”ฉ ์—ฐ์Šต


์ž‘์—…์€name๊ณผgoals ์†์„ฑ์„ ๊ฐ€์ง„ SoccerPlayer ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  3๊ฐœ์˜player ๋Œ€์ƒ์„ ๋งŒ๋“ค๊ณ  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ ๋ชฉํ‘œ๋ฅผ ์ฐพ์•„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
class SoccerPlayer:
  def __init__(self, name, goals):
    self.name = name
    self.goals = goals


def calculateMaxGoals(*args):
  print(args)
  return max(*args)

messi = SoccerPlayer('messi', 10)
ronaldo = SoccerPlayer('ronaldo',22)
neymar = SoccerPlayer('neymar', 8)

max_goals = calculateMaxGoals(messi.goals, ronaldo.goals, neymar.goals)
print(f'The highest number of goals is {max_goals} goals')

@classmethod์™€ @staticmethod


๋ฐฉ๋ฒ•์€ ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ž˜์Šค์˜ ์‹ค๋ก€๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.์ด ์ ์„ ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  • @classmethod ๋ฐฉ๋ฒ• ์ด๋ฆ„์˜ ๋งจ ์œ„์— ์ด๋ฅธ๋ฐ” ์žฅ์‹๊ธฐ@classmethod๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํด๋ž˜์Šค์—์„œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
    ์ž ์‹œ ํ›„์— ๋‚˜๋Š” ์žฅ์‹๊ธฐ๋ฅผ ์ƒ์„ธํ•˜๊ฒŒ ์—ฐ๊ตฌํ•  ๊ฒƒ์ด์ง€๋งŒ, ํ˜„์žฌ ๋‚˜๋Š” ๋‹จ์ง€ ์ฐฝ์„ค ์œ ํ˜•์˜ ๊ฐœ๋…์„ ๋Œ€์ฒด์ ์œผ๋กœ ์ดํ•ดํ–ˆ์„ ๋ฟ์ด๋‹ค.
  • class Calculator:
      def __init__(self,type):
        self.type = type
    
      @classmethod
      def calculate_sum(cls, num1, num2): 
            return num1 + num2
        # cls is just like self which needs to passed as 1st parameter
    
    print(Calculator.calculate_sum(3,5)) # 8
    
  • @staticmethod์™€ @classmethod๋Š” ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค.ํ‚ค์›Œ๋“œ๋ฅผ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹คcls.์ด ๋ฐฉ๋ฒ•์€ ์‹ค๋ก€ํ™”๋˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • class Calculator:
      def __init__(self,type):
        self.type = type
    
      @staticmethod
      def multiply(num1, num2): 
            return num1 * num2
        # cls is just like self which needs to passed as 1st parameter
    
    print(Calculator.multiply(3,5)) # 15
    
    ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€.๋‚˜๋Š” ๋Œ€์ƒ์„ ๋Œ€์ƒ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์ƒ์„ธํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๋ฉฐ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์—์„œ ์—ฐ์Šต์„ ํ•  ๊ฒƒ์ด๋‹ค.์‹ฌ์ง€ ๋ชจํ˜•์€ ์•ž์œผ๋กœ ๋ฉฐ์น  ๋™์•ˆ ๋” ๋†’์€ ์ฃผ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋Š๋ฆฌ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋‹ค.
    ๋„ˆ๋„ ์žฌ๋ฐŒ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด.
    ๋‚˜๋Š” ํŒŒ์ดํ†ค์˜ ์ฐฝ์‹œ์ž์™€ ํ•จ๊ป˜ ์ด ์žฌ๋ฏธ์žˆ๋Š” ํ€ด์ฆˆ ์˜์ƒ์„ ๋ณด๊ณ  ์žˆ๋‹ค.๊ณต์œ ํ•˜๊ณ  ์‹ถ๋‹ค:)
    ์ธ์ฝ”๋”ฉ์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.๋‹ˆ ์ƒ๊ฐ์„ ์•Œ๋ ค์ค˜.
    ์ฆ๊ฑฐ์šด ์‹œ๊ฐ„ ๋ณด๋‚ด์„ธ์š”!

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ