파이썬에서도 객체지향 프로그래밍(OOP) 의 중요성과 코딩 습관을 강조하곤 합니다.
클래스 내에 메소드를 구현할 때 파이썬에서는 3가지 유형을 제공합니다.
class method, intance method, static method 인데요.
아래 3가지 유형을 정리해봅니다.
- class method
- 클래스에 바인딩되는 함수
- 클래스의 상태를 수정하여 모든 인스턴스에 적용될 수 있는 함수
- instance method
- self 를 첫 번째 인자로 받는 메소드
- 클래스의 인스턴스를 “암시적”으로 입력받아 클래스 속성과 상호 작용할 수 있습니다.
- 인스턴스 내 데이터를 액세스 할 수 있고, 수정할 수 있습니다.
- static method
- 데코레이터를 이용해 정의합니다.
- 클래스의 인스턴스가 아닌 클래스에 속합니다.
- 특정 클래스의 컨텍스트 내에서 의미가 있는 함수를 만들 때 정의합니다.
이중에서 class method 를 유틸리티 성 함수를 구현할 때 사용하면 좋은데요. 아래 예를 들어보겠습니다.
import pandas as pd
class DataETLProcessor:
def __init__(self,data):
self.data =data
def process_etl(self):
#write etl process logic code
pass
def from_csv_by_instance_method(self,filepath):
self.data = pd.read_csv(filepath)
@classmethod
def from_csv_by_class_method(cls,filepath):
data = pd.read_csv(filepath)
return cls(data)
@classmethod
def from_json(cls,filepath):
data = pd.read_json(filepath)
return cls(data)
# case 1 실행 예제)
etl = DataETLProcessor()
etl.from_csv_by_instance_method("./sample_data.csv")
etl.process_etl()
# case 2실행 예제)
etl = DataETLProcessor.from_csv_by_class_method("./sample_data.csv")
etl.process_etl()
case 1는 instance method 를 이용한 호출이고, case2 는 class method 를 이용한 호출인데, 한 줄 줄었지만 더 간결해졌어요.
그리고 instance 와 class 관련된 변수와 기능, 로직을 분리하면 코드가 깔끔해집니다. 위에서 from_json , from_parquet 그리고 아예 파경로에서 파일 타입을 읽어 포맷별로 데이터를 읽을 수 있도록 구현할 수도 있구요.
프로그램의 볼륨이 커질수 있다면 유지보수 용이하게 저렇게 분리해서 구현하는 습관을 들여도 좋겠습니다.
물론 간단한 프로그램이라면 그냥 편한대로 구현하는게 더 좋을 수 있습니다.