class GameCharacter:
# °ÔÀÓ Ä³¸¯ÅÍ Å¬·¡½º
def __init__(self, name, hp, power):
self.name = name # °ÔÀÓ Ä³¸¯ÅÍÀÇ À̸§
self.hp = hp # °ÔÀÓ Ä³¸¯ÅÍÀÇ·Â
self.power = power # °ÔÀÓ Ä³¸¯ÅÍÀÇ °ø°Ý·Â
def is_alive(self):
# °ÔÀÓ Ä³¸¯ÅÍÀÇ »ýÁ¸ ¿©ºÎ È®ÀÎ(ü·ÂÀÌ º¸´Ù Å«Áö)
return self.hp >
def get_attacked(self, damage):
if self.is_alive():
if self.hp < damage:
self.hp =
else:
self.hp -= damage
else:
print(f"{self.name}´ÔÀº ÀÌ¹Ì Á×¾ú½À´Ï´Ù.")
def attack(self, other_character):
# ÀÚ½ÅÀÌ »ì¾ÆÀÖ´Â °æ¿ì¿¡¸¸ °ø°ÝÀ» ¼öÇà
if self.is_alive():
other_character.get_attacked(self.power)
def __str__(self):
return f"{self.name}´ÔÀÇ hp´Â {self.hp}¸¸Å ³²¾Ò½À´Ï´Ù."
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº »ý¼º
character_1 = GameCharacter("Ww¿µÈÆÀü»çwW", , 30)
character_2 = GameCharacter("XxÁö¿õÃÖ°íxX", 100, 50)
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽºµé ¼·Î °ø°Ý
character_1.attack(character_2) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # Áö¿õÃÖ°í°¡ ¿µÈÆÀü»ç¸¦ °ø°Ý
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº Ãâ·Â
print(character_1)
print(character_2)
ÀÚ±â¼Ò°³°¡ ¾ø½À´Ï´Ù.
Äڵ忡 ºüÁø ºÎºÐ°ú ºÒÇÊ¿äÇÑ ºÎºÐÀ» ¼öÁ¤ÇÏ°Ú½À´Ï´Ù. ¶ÇÇÑ, ÀϺΠÀνºÅϽº º¯¼ö¿¡ ÇÒ´çµÇ¾î¾ß ÇÒ ÃʱⰪÀÌ ´©¶ôµÈ °ÍÀ» º¸¿ÏÇÏ°Ú½À´Ï´Ù.
class GameCharacter:
# °ÔÀÓ Ä³¸¯ÅÍ Å¬·¡½º
def __init__(self, name, hp, power):
self.name = name # °ÔÀÓ Ä³¸¯ÅÍÀÇ À̸§
self.hp = hp # °ÔÀÓ Ä³¸¯ÅÍÀÇ Ã¼·Â
self.power = power # °ÔÀÓ Ä³¸¯ÅÍÀÇ °ø°Ý·Â
def is_alive(self):
# °ÔÀÓ Ä³¸¯ÅÍÀÇ »ýÁ¸ ¿©ºÎ È®ÀÎ(ü·ÂÀÌ º¸´Ù Å«Áö)
return self.hp >
def get_attacked(self, damage):
if self.is_alive():
if self.hp < damage:
self.hp =
else:
self.hp -= damage
else:
print(f"{self.name}´ÔÀº ÀÌ¹Ì Á×¾ú½À´Ï´Ù.")
def attack(self, other_character):
# ÀÚ½ÅÀÌ »ì¾ÆÀÖ´Â °æ¿ì¿¡¸¸ °ø°ÝÀ» ¼öÇà
if self.is_alive():
other_character.get_attacked(self.power)
def __str__(self):
return f"{self.name}´ÔÀÇ hp´Â {self.hp}¸¸Å ³²¾Ò½À´Ï´Ù."
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº »ý¼º
character_1 = GameCharacter("Ww¿µÈÆÀü»çwW", , 30)
character_2 = GameCharacter("XxÁö¿õÃÖ°íxX", 100, 50)
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽºµé ¼·Î °ø°Ý
character_1.attack(character_2) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # Áö¿õÃÖ°í°¡ ¿µÈÆÀü»ç¸¦ °ø°Ý
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº Ãâ·Â
print(character_1)
print(character_2)
ÀÌ ÄÚµå´Â ¿ä±¸»çÇ׿¡ ¸Â°Ô ¼öÁ¤µÇ¾ú½À´Ï´Ù. ij¸¯ÅÍÀÇ Ã¼·ÂÀÌ º¸´Ù Ŭ ¶§¸¸ »ì¾ÆÀÖ´Ù°í ÆÇÁ¤ÇÏ°í, ü·ÂÀÌ ÀÌÇÏÀÏ ¶§ °ø°ÝÀ» ¹ÞÀ¸¸é 'ÀÌ¹Ì Á×¾ú´Ù'´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÕ´Ï´Ù. character_1
ÀÇ Ã¼·ÂÀ» À¸·Î ÃʱâÈÇÏ¿© ½ÃÀÛºÎÅÍ 'ÀÌ¹Ì Á×¾ú´Ù'´Â ¸Þ½ÃÁö°¡ Ç¥½ÃµÇµµ·Ï Çß½À´Ï´Ù.
Á˼ÛÇÕ´Ï´Ù. Äڵ忡 ½Ç¼ö°¡ ÀÖ¾ú½À´Ï´Ù. ¼öÁ¤ÇÏ¿© Á¤È®ÇÑ ¹öÀüÀ» Á¦°øÇÏ°Ú½À´Ï´Ù.
class GameCharacter:
# °ÔÀÓ Ä³¸¯ÅÍ Å¬·¡½º
def __init__(self, name, hp, power):
self.name = name # °ÔÀÓ Ä³¸¯ÅÍÀÇ À̸§
self.hp = hp # °ÔÀÓ Ä³¸¯ÅÍÀÇ Ã¼·Â
self.power = power # °ÔÀÓ Ä³¸¯ÅÍÀÇ °ø°Ý·Â
def is_alive(self):
# °ÔÀÓ Ä³¸¯ÅÍÀÇ »ýÁ¸ ¿©ºÎ È®ÀÎ
return self.hp >
def get_attacked(self, damage):
if self.is_alive():
if self.hp < damage:
self.hp =
else:
self.hp -= damage
else:
print(f"{self.name}´ÔÀº ÀÌ¹Ì Á×¾ú½À´Ï´Ù.")
def attack(self, other_character):
# ÀÚ½ÅÀÌ »ì¾ÆÀÖ´Â °æ¿ì¿¡¸¸ °ø°ÝÀ» ¼öÇà
if self.is_alive():
other_character.get_attacked(self.power)
def __str__(self):
return f"{self.name}´ÔÀÇ hp´Â {self.hp}¸¸Å ³²¾Ò½À´Ï´Ù."
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº »ý¼º
character_1 = GameCharacter("Ww¿µÈÆÀü»çwW", , 30)
character_2 = GameCharacter("XxÁö¿õÃÖ°íxX", 100, 50)
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽºµé ¼·Î °ø°Ý
character_1.attack(character_2) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # Áö¿õÃÖ°í°¡ ¿µÈÆÀü»ç¸¦ °ø°Ý
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº Ãâ·Â
print(character_1)
print(character_2)
À§ ÄÚµå´Â ¼öÁ¤µÈ ¿ÏÀüÇÑ ¿¹Á¦·Î GameCharacter
Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í ½ÇÁ¦ °ÔÀÓ Ä³¸¯ÅÍ °´Ã¼¸¦ »ý¼ºÇÏ¿© ±×µéÀÌ ¼·Î¸¦ °ø°ÝÇÏ´Â »óȲÀ» ½Ã¹Ä·¹À̼ÇÇÕ´Ï´Ù. character_1
ÀÇ Ãʱâ hp
°ªÀ» À¸·Î ¼³Á¤ÇÏ¿© ½ÃÀÛºÎÅÍ 'ÀÌ¹Ì Á×¾ú´Ù'´Â ¸Þ½ÃÁö°¡ ³ª¿Àµµ·Ï ±¸¼ºÇß½À´Ï´Ù.
ÀÌ Äڵ忡¼ ¹ß»ýÇÑ ¿À·ù´Â GameCharacter
Ŭ·¡½ºÀÇ character_1
ÀνºÅϽº¸¦ »ý¼ºÇÏ´Â ºÎºÐ¿¡ ÀÖ½À´Ï´Ù. character_1
À» »ý¼ºÇÒ ¶§ µÎ ¹ø° ÀÎÀÚ(ü·Â hp
)¸¦ Á¦°øÇÏÁö ¾Ê¾Æ¼ ¹ß»ýÇÑ ¹®¹ý ¿À·ùÀÔ´Ï´Ù. ±×¸®°í, ¸î °¡Áö ³í¸®Àû ¿À·ùµµ ¼öÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
¶ÇÇÑ, is_alive
¸Þ¼Òµå¿¡¼ damage
¸¦ ÂüÁ¶Çϴµ¥, ÀÌ´Â ÇØ´ç ¸Þ¼ÒµåÀÇ Áö¿ª º¯¼ö·Î Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡ ¿À·ù°¡ µË´Ï´Ù. Á¶°ÇÀ» ¿Ã¹Ù¸£°Ô self.hp >
À¸·Î ¼öÁ¤ÇØ¾ß ÇÕ´Ï´Ù. ±×¸®°í get_attacked
¸Þ¼Òµå¿¡¼ ü·ÂÀÌ °ø°Ý·Âº¸´Ù ÀÛÀ» ¶§ ü·ÂÀ» ``À¸·Î ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù.
¾Æ·¡´Â ¼öÁ¤µÈ Àüü ÄÚµåÀÔ´Ï´Ù:
class GameCharacter:
# °ÔÀÓ Ä³¸¯ÅÍ Å¬·¡½º
def __init__(self, name, hp, power):
self.name = name # °ÔÀÓ Ä³¸¯ÅÍÀÇ À̸§
self.hp = hp # °ÔÀÓ Ä³¸¯ÅÍÀÇ Ã¼·Â
self.power = power # °ÔÀÓ Ä³¸¯ÅÍÀÇ °ø°Ý·Â
def is_alive(self):
# °ÔÀÓ Ä³¸¯ÅÍÀÇ »ýÁ¸ ¿©ºÎ È®ÀÎ(ü·ÂÀÌ º¸´Ù Å«Áö)
return self.hp >
def get_attacked(self, damage):
if self.is_alive():
if self.hp < damage:
self.hp =
else:
self.hp -= damage
else:
print(f"{self.name}´ÔÀº ÀÌ¹Ì Á×¾ú½À´Ï´Ù.")
def attack(self, other_character):
# ÀÚ½ÅÀÌ »ì¾ÆÀÖ´Â °æ¿ì¿¡¸¸ °ø°ÝÀ» ¼öÇà
if self.is_alive():
other_character.get_attacked(self.power)
def __str__(self):
return f"{self.name}´ÔÀÇ hp´Â {self.hp}¸¸Å ³²¾Ò½À´Ï´Ù."
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº »ý¼º
character_1 = GameCharacter("Ww¿µÈÆÀü»çwW", , 30) # ¼öÁ¤µÈ ºÎºÐ: ü·Â °ªÀ» Á¦°øÇß½À´Ï´Ù.
character_2 = GameCharacter("XxÁö¿õÃÖ°íxX", 100, 50)
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽºµé ¼·Î °ø°Ý
character_1.attack(character_2) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # Áö¿õÃÖ°í°¡ ¿µÈÆÀü»ç¸¦ °ø°Ý
character_2.attack(character_1) # ¿µÈÆÀü»ç´Â ÀÌ¹Ì Á×¾úÀ¸¹Ç·Î °ø°Ý ºÒ°¡
character_2.attack(character_1) # Ãß°¡ °ø°Ý ½Ãµµ
character_2.attack(character_1) # Ãß°¡ °ø°Ý ½Ãµµ
character_2.attack(character_1) # Ãß°¡ °ø°Ý ½Ãµµ
# °ÔÀÓ Ä³¸¯ÅÍ ÀνºÅϽº Ãâ·Â
print(character_1)
print(character_2)
ÀÌ ÄÚµå´Â character_1
ÀÇ Ã¼·ÂÀ» À¸·Î ¼³Á¤ÇÏ¿©, ½ÃÀÛºÎÅÍ Á×Àº »óÅ°¡ µÇ¾î Ãß°¡ÀûÀÎ °ø°ÝÀ» ¹ÞÁö ¾Ê½À´Ï´Ù. `is_alive` ¸Þ¼Òµå¸¦ ÅëÇØ Ã¼·ÂÀÌ
º¸´Ù Ŭ ¶§¸¸ ij¸¯ÅÍ°¡ »ì¾ÆÀÖ´Ù°í ÆÇ´ÜÇÏ°Ô ¼öÁ¤Çß½À´Ï´Ù.
class Post:
def __init__(self, date, content):
self.date = date
self.content = content
def __str__(self):
# ³»¿ë(content) Ç׸ñ¿¡¼ ÁٹٲÞÀ» Çϱâ À§ÇØ '\n'À» Ãß°¡ÇÕ´Ï´Ù.
return "ÀÛ¼º ³¯Â¥: {}\n³»¿ë:\n{}".format(self.date, self.content.replace(". ", ".\n"))
class BlogUser:
def __init__(self, name):
self.name = name
self.posts = []
def add_post(self, date, content):
new_post = Post(date, content)
self.posts.append(new_post)
def show_all_posts(self):
print("¾È³çÇϼ¼¿ä {}ÀÔ´Ï´Ù.\n".format(self.name))
for post in self.posts:
print(post)
print() # °¢ Æ÷½ºÆ® »çÀÌ¿¡ ºó ÁÙÀ» Ãß°¡ÇÏ¿© Ãâ·ÂÀ» ºÐ¸®ÇÕ´Ï´Ù.
blog_user_1 = BlogUser("¼ºÅÂÈ£")
blog_user_1.add_post("2019³â 8¿ù 30ÀÏ", "¿À´ÃÀº ³» »ýÀÏÀ̾ú´Ù. ¸¹Àº »ç¶÷µéÀÌ ÃàÇÏÇØÁá´Ù. ÇູÇß´Ù.")
blog_user_1.add_post("2019³â 8¿ù 31ÀÏ", "Àç¹Õ´Â ÄÚµù ±³À° »çÀÌÆ®¸¦ ã¾Ò´Ù. ÄÚµåÀÕÀ̶õ °÷Àε¥ ÃÖ°í´Ù. °°ÀÌ °øºÎÇÏ½Ç ºÐµéÀº www.codeit.kr·Î ¿À¼¼¿ä!")
blog_user_1.show_all_posts()
ÀÌ ÄÚµå´Â Post
ÀÇ __str__
¸Þ¼Òµå ³» ³»¿ëÀ» Ãâ·ÂÇÒ ¶§, ¹®ÀåÀÌ ³¡³¯ ¶§¸¶´Ù ÀÚµ¿À¸·Î ÁٹٲÞÀÌ ÀϾµµ·Ï content.replace(". ", ".\n")
¸¦ »ç¿ëÇÏ¿© ¹®ÀåÀÇ ¸¶Áö¸·¿¡ ÀÖ´Â ". "À» ".\n"À¸·Î º¯°æÇÕ´Ï´Ù.ÀÌ º¯°æÀ» ÅëÇØ ¿ä±¸»çÇ׿¡ ¸Â´Â Ãâ·Â Çü½Ä¿¡ ¸ÂÃç °¢ Æ÷½ºÆ® ³»¿¡ ¹®Àå º°·Î ÁٹٲÞÀÌ ÀÌ·ç¾îÁý´Ï´Ù. ¶ÇÇÑ, °¢ Æ÷½ºÆ® »çÀÌ¿¡ ºó ÁÙÀ» Ãß°¡Çϱâ À§ÇØ show_all_posts
¸Þ¼Òµå¿¡¼ print()
ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
class Counter:
"""
½Ã°è Ŭ·¡½ºÀÇ ½Ã, ºÐ, Ãʸ¦ °¢°¢ ³ªÅ¸³»´Âµ¥ »ç¿ëµÉ Ä«¿îÅÍ Å¬·¡½º
"""
def __init__(self, limit):
"""
ÀνºÅϽº º¯¼ö limit(ÃÖ´ñ°ª), value(ÇöÀç±îÁö Ä«¿îÆ®ÇÑ °ª)¸¦ ¼³Á¤ÇÑ´Ù.
ÀνºÅϽº¸¦ »ý¼ºÇÒ ¶§ ÀνºÅϽº º¯¼ö limit¸¸ ÆĶó¹ÌÅÍ·Î ¹Þ°í, value´Â Ãʱ갪 À¸·Î ¼³Á¤ÇÑ´Ù.
"""
self.limit = limit
self.value =
def set(self, new_value):
"""
ÆĶó¹ÌÅÍ°¡ ÀÌ»ó, ÃÖ´ñ°ª ¹Ì¸¸À̸é value¿¡ ¼³Á¤ÇÑ´Ù.
¾Æ´Ò °æ¿ì value¿¡ À» ¼³Á¤ÇÑ´Ù.
"""
if <= new_value < self.limit:
self.value = new_value
else:
self.value =
def tick(self):
"""
value¸¦ 1 Áõ°¡½ÃŲ´Ù.
Ä«¿îÅÍÀÇ °ª value°¡ limit¿¡ µµ´ÞÇϸé value¸¦ À¸·Î ¹Ù²Û µÚ True¸¦ ¸®ÅÏÇÑ´Ù.
value°¡ limitº¸´Ù ÀÛÀº °æ¿ì False¸¦ ¸®ÅÏÇÑ´Ù.
"""
self.value += 1
if self.value == self.limit:
self.value =
return True
else:
return False
def __str__(self):
"""
value¸¦ ÃÖ¼Ò µÎ ÀÚ¸´¼ö ÀÌ»óÀÇ ¹®ÀÚ¿·Î ¸®ÅÏÇÑ´Ù.
ÀÏ´Ü str ÇÔ¼ö·Î ¼ýÀÚÇü º¯¼öÀÎ value¸¦ ¹®ÀÚ¿·Î º¯È¯ÇÏ°í zfill ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
"""
return str(self.value).zfill(2)
# ÃÖ´ë 30±îÁö ¼¿ ¼ö ÀÖ´Â Ä«¿îÅÍ ÀνºÅϽº »ý¼º
counter = Counter(30)
# 1ºÎÅÍ 5±îÁö ¼¾´Ù
print("1ºÎÅÍ 5±îÁö Ä«¿îÆ®Çϱâ")
for i in range(5):
counter.tick()
print(counter)
# ŸÀÌ¸Ó °ªÀ» À¸·Î ¹Ù²Û´Ù
print("Ä«¿îÅÍ °ª À¸·Î ¼³Á¤Çϱâ")
counter.set()
print(counter)
# Ä«¿îÅÍ °ª 27·Î ¼³Á¤
print("Ä«¿îÅÍ °ª 27·Î ¼³Á¤Çϱâ")
counter.set(27)
print(counter)
# Ä«¿îÅÍ °ªÀÌ 30ÀÌ µÇ¸é À¸·Î ¹Ù²î´ÂÁö È®ÀÎ
print("Ä«¿îÅÍ °ªÀÌ 30ÀÌ µÇ¸é À¸·Î ¹Ù²ò´Ï´Ù")
for i in range(5):
counter.tick()
print(counter)
À§ Äڵ忡¼ ºóÄÀ» ä¿ö³Ö¾ú½À´Ï´Ù. __init__
¿¡¼ value
Ãʱ갪À» À¸·Î ¼³Á¤ÇÑ´Ù´Â ÁÖ¼®¿¡ µû¶ó `self.value = `À¸·Î ¼³Á¤ÇØ ºóÄÀ» ä¿ü½À´Ï´Ù. `set` ¸Þ¼Òµå¿¡¼´Â Á¶°Ç¿¡ µû¶ó `value`¿¡ `new_value`¸¦ ÇÒ´çÇϰųª
À» ÇÒ´çÇÕ´Ï´Ù. ºóÄ¿¡´Â ``À» ÇÒ´çÇÏ´Â ÄÚµå self.value =
À» Ãß°¡Çß½À´Ï´Ù. tick
¸Þ¼Òµå¿¡¼ value
°¡ limit
¿¡ µµ´ÞÇßÀ» ¶§ self.value =
À¸·Î ÃʱâÈÇÕ´Ï´Ù.
1, 2, 3, 4
1¹ø¸íÀº Ãß»óȸ¦ ÅëÇØ ±¸Çö ¼¼»çÇ×À» ¼û±â°í »ç¿ëÀÚ¿¡´Â ÇÊ¿äÇÑÅÍÆäÀ̽º¸¸°øÇÏ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. »ç¿ëÀÚ º¹ÀâÇÑ ³»ºÎ ·ÎÁ÷À» ¸ô¶óµµ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
2¹ø ¼³¸íµµ Ãß»óÈÀÇ ÇÑ ÇüÅÂÀÔ´Ï´Ù. Ŭ·¡½º ³»ºÎÀÇ ¼Ó¼ºÀ̳ª ¸Þ¼Òµå¸¦ ĸ½¶È¿Í Á¤º¸ Àº´ÐÀ» ÅëÇØ ¿ÜºÎ·ÎºÎÅÍ ¼û±â´Â °ÍÀ» ¸»ÇÕ´Ï´Ù.
3¹ø ¼³¸íÀº Ãß»óÈµÈ Å¬·¡½ºÀÇ ³»¿ëÀ» ÀÌÇØÇÒ ¶§, docstring Áï, Äڵ忡 ´ëÇÑ ¹®¼È¸¦ ÅëÇØ Å¬·¡½ºÀÇ »ç¿ë¹ýÀ̳ª ¸ñÀû µîÀ» ¸íÈ®È÷ ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÝ´Ï´Ù.
4¹ø ¼³¸íÀº Ãß»óÈ°¡ ½Ç¼¼°èÀÇ ´ë»óÀ̳ª °³³äÀ» ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â °´Ã¼·Î ¸¸µå´Â °úÁ¤À» ¼³¸íÇÕ´Ï´Ù. ÀÌ °úÁ¤À» ÅëÇØ ½ÇÁ¦ °´Ã¼ÀÇ ÇÙ½ÉÀûÀΠƯ¡À» Ãß·Á³»¾î ÇÁ·Î±×·¥ ³»¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
ÀÇÁ¸ °ü°è ¿ªÀü ¿øÄ¢(DIP)À» Àû¿ëÇϱâ À§Çؼ´Â »óÀ§ ¸ðµâÀÌ ÇÏÀ§ ¸ðµâÀÇ ±¸ÇöÀÌ ¾Æ´Ï¶ó Ãß»óÈ¿¡ ÀÇÁ¸ÇØ¾ß ÇÕ´Ï´Ù. À̸¦ À§ÇØ º¯È¯±â¿¡ °øÅë ÀÎÅÍÆäÀ̽º(Ãß»ó Ŭ·¡½º)¸¦ µµÀÔÇÏ°í, CSVExporter
¿Í HTMLExporter
°¡ ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϵµ·Ï ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÆÄÀ̽㿡¼´Â abc
¸ðµâÀ» »ç¿ëÇÏ¿© Ãß»ó Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
¾Æ·¡´Â ¼öÁ¤µÈ ÄÚµåÀÔ´Ï´Ù:
from abc import ABC, abstractmethod
class Document:
def __init__(self, name, content):
self._name = name
self._content = content
@property
def content(self):
"""¹®¼ÀÇ ³»¿ëÀ» ¸®ÅÏÇÑ´Ù"""
return self._content
def __str__(self):
"""¹®¼ÀÇ Á¤º¸¸¦ ¹®ÀÚ¿·Î ¸®ÅÏÇÑ´Ù"""
return f"¹®¼ À̸§: {self._name}\n¹®¼ ³»¿ë:\n{self._content}"
# Exporter Ãß»ó Ŭ·¡½º Ãß°¡
class Exporter(ABC):
@abstractmethod
def export(self, new_name, document):
pass
class CSVExporter(Exporter):
"""¹®¼¸¦ csv Çü½ÄÀ¸·Î º¯È¯Çϴ Ŭ·¡½º"""
def export(self, new_name, document):
"""¹®¼¸¦ º¯È¯ÇÑ ÈÄ ÁÖ¾îÁø À̸§À¸·Î ¸®ÅÏÇÑ´Ù"""
print("\nCSV ÆÄÀÏ·Î º¯È¯ Áß~")
new_content = document.content.replace("|", ",")
exported_document = Document(new_name, new_content)
print("º¯È¯ ¿Ï·á!\n")
return exported_document
class HTMLExporter(Exporter):
"""¹®¼¸¦ HTML Çü½ÄÀ¸·Î º¯È¯Çϴ Ŭ·¡½º"""
def export(self, new_name, document):
"""¹®¼¸¦ º¯È¯ÇÑ ÈÄ ÁÖ¾îÁø À̸§À¸·Î ¸®ÅÏÇÑ´Ù"""
print("\nHTML ¹®¼ º¯È¯ Áß~")
new_content = """
Title of the document
{}
""".format(document.content)
exported_document = Document(new_name, new_content)
print("º¯È¯ ¿Ï·á!\n")
return exported_document
class ExportController:
"""¹®¼¸¦ ƯÁ¤ ÆÄÀÏ Çü½ÄÀ¸·Î º¯È¯Çϴ Ŭ·¡½º"""
def __init__(self):
self.exporter = None
def set_exporter(self, exporter: Exporter):
"""º¯È¯ÇÏ°í ½ÍÀº ÆÄÀÏ Å¸ÀÔ¿¡ ¸Â´Â º¯È¯±â¸¦ ¼³Á¤ÇÑ´Ù"""
self.exporter = exporter
def run_export(self, new_name, document):
"""ÆÄÀÏÀ» º¯È¯Çؼ ¸®ÅÏÇÑ´Ù"""
if self.exporter is None:
print("º¯È¯±â¸¦ Á¤ÇØÁÖ¼¼¿ä")
return document
return self.exporter.export(new_name, document)
ÀÌÁ¦ ExportController
Ŭ·¡½º´Â Ãß»ó Ŭ·¡½º Exporter
¿¡ ÀÇÁ¸ÇÏ°Ô µÇ¾î, ¾î¶² º¯È¯±â(CSVExporter
³ª HTMLExporter
)¸¦ »ç¿ëÇÏµç »ó°ü¾øÀÌ ±× ÀÎÅÍÆäÀ̽º(export
¸Þ¼µå)¸¦ ÅëÇØ ¹®¼ º¯È¯ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. À̷νá ÀÇÁ¸ °ü°è ¿ªÀü ¿øÄ¢(DIP)À» ¸¸Á·½ÃÅ°´Â µ¿½Ã¿¡, Äڵ带 ´õ À¯¿¬ÇÏ°Ô ¸¸µé¾î ´Ù¸¥ Á¾·ùÀÇ º¯È¯±â¸¦ ½±°Ô Ãß°¡ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.