Menu
Coddy logo textTech

개방 폐쇄 원칙

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 라이브러리는 파이썬의 추상 베이스 클래스를 지원합니다. 자세한 내용은 여기에서 확인할 수 있습니다.

challenge icon

챌린지

중급

당신의 과제는 주어진 예제를 수정하여 개방-폐쇄 원칙(Open-Closed principle)을 적용하고, txt를 html로 지원하는 변환기를 추가하는 것입니다.

  1. 추상 클래스 TxtConvertor를 생성하세요.
  2. 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")

Clean Code - Python으로 더 나은 코드 작성하기의 모든 레슨