SRP

Single Responsibility Principle

Class Should have its primary responsibility and should not take on other responsibilities.

Anti Pattern 예제
class Journal:
    def __init__(self):
        self.entries = []
        self.count = 0
    def add_entry(self, text):
        self.entries.append(f"{self.count}: {text}")
        self.count += 1
    def remove_entry(self, pos):
        del self.entries[pos]
    def __str__(self):
        return "\n".join(self.entries)
    # break SRP
    def save(self, filename):
        file = open(filename, "w")
        file.write(str(self))
        file.close()
    def load(self, filename):
        pass
    def load_from_web(self, uri):
        pass
개선하기 위해 아래 save, load 를 PersistenceManager Class로 구현
class PersistenceManager:
    def save_to_file(journal, filename):
        file = open(filename, "w")
        file.write(str(journal))
        file.close()
j = Journal()
j.add_entry("I cried today.")
j.add_entry("I ate a bug.")
print(f"Journal entries:\n{j}\n")
p = PersistenceManager()
file = r'c:\temp\journal.txt'
p.save_to_file(j, file)
# verify!
with open(file) as fh:
    print(fh.read())