PYTHON · 함수형
사이드이펙트 관리
함수형 프로그래밍에서 사이드이펙트를 격리하고 관리하는 패턴입니다.
함수형고급side effect사이드이펙트IO함수형
핵심 설명
함수형 프로그래밍에서 사이드이펙트를 격리하고 관리하는 패턴입니다.
Python code
from typing import Callable, TypeVar
from dataclasses import dataclass
T = TypeVar("T")
@dataclass
class IO:
"""사이드이펙트를 캡슐화하는 IO 모나드"""
_effect: Callable
def run(self):
return self._effect()
def map(self, func: Callable) -> "IO":
return IO(lambda: func(self.run()))
def bind(self, func: Callable) -> "IO":
return IO(lambda: func(self.run()).run())
# 순수 비즈니스 로직
def format_greeting(name: str) -> str:
return f"안녕하세요, {name}님!"
def to_upper(text: str) -> str:
return text.upper()
# IO로 사이드이펙트 래핑
def get_input(prompt: str) -> IO:
return IO(lambda: prompt) # 실제: input(prompt)
def put_output(text: str) -> IO:
return IO(lambda: print(text))
# 사이드이펙트 격리
program = (
get_input("이름: ")
.map(format_greeting)
.map(to_upper)
)
result = program.run()
print(result) # 안녕하세요, 이름:님! → UPPER
# 실용적 패턴: 의존성 주입
def process_data(data, *, reader=open, writer=print):
"""I/O를 주입받아 테스트 가능하게 만듦"""
content = f"처리됨: {data}"
writer(content)
return content
print(process_data("테스트 데이터"))학습 팁
의존성 주입으로 I/O를 인자로 전달하면 테스트 시 mock으로 쉽게 교체할 수 있습니다.
주의할 점
모든 사이드이펙트를 제거하려 하면 실용적이지 않습니다. 핵심은 순수 로직과 I/O를 분리하는 것입니다.
자주 묻는 질문
사이드이펙트 관리란 무엇인가요?
함수형 프로그래밍에서 사이드이펙트를 격리하고 관리하는 패턴입니다.
사이드이펙트 관리 학습 시 주의할 점은 무엇인가요?
모든 사이드이펙트를 제거하려 하면 실용적이지 않습니다. 핵심은 순수 로직과 I/O를 분리하는 것입니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.