개방 폐쇄 원칙
Coddy의 Clean Code - Python으로 더 나은 코드 작성하기 코스 레슨 — 28개 중 23번째.
"소프트웨어 개체는 확장에 대해서는 열려 있어야 하지만, 수정에 대해서는 닫혀 있어야 한다."
이 원칙은 모든 함수, 모듈 또는 클래스가 코드 자체를 수정하지 않고도 그 동작을 확장할 수 있도록 허용해야 함을 명시합니다.
예를 들어, txt 파일을 json 또는 xml로 변환하는 TxtConvertor 클래스가 있다고 가정해 보겠습니다.
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")이 구조는 개방-폐쇄 원칙(Open-Closed principle)을 위반합니다.
이유가 무엇일까요?
예를 들어, txt 파일에서 html로 변환하는 기능을 추가하고 싶다면 기존 클래스를 수정해야 하기 때문입니다 (폐쇄 원칙 위반).
그렇다면 어떻게 해야 할까요?
이 예시에서 한 가지 해결책은 메인 함수를 보유할 추상 클래스를 만드는 것입니다.
from abc import ABC, abstractmethod
class TxtConvertor(ABC):
@abstractmethod
def convert(self, file):
pass
class TxtConvertorToJson(TxtConvertor):
...
.
.
.
abc라이브러리는 파이썬의 추상 베이스 클래스를 지원합니다. 자세한 내용은 여기에서 확인할 수 있습니다.
챌린지
중급당신의 과제는 주어진 예제를 수정하여 개방-폐쇄 원칙(Open-Closed principle)을 적용하고, txt를 html로 지원하는 변환기를 추가하는 것입니다.
- 추상 클래스
TxtConvertor를 생성하세요. TxtConvertor를 상속받아 (위의 예제와 같이) 변환기를 구현하는TxtConvertorToJson,TxtConvertorToXML,TxtConvertorToHTML클래스를 생성하세요.
직접 해보기
class TxtConvertor:
def convert_to_json(self, file):
print("converts file to json")
def convert_to_xml(self, file):
print("converts file to xml")