Side Effect
Procedure
fp
Side Effect
부수 효과(side effect)란 함수에서 결괏값을 주는 것 외에 하는 모든 행동을 의미한다. 부수 효과는 일반적으로 해당 메서드 밖에 있는 상태를 변경하거나, I/O 를 수행하는 것으로 정의된다. 부수 효과만을 위해 실행되는 메서드를 프로시저(procedure) 라고 부른다.
Pseudo Code:
fun call() {
// Do something is side effect
return "result"
}
Examples:
// 순수 함수: 부수 효과 없이 결괏값만 반환
def add(a: Int, b: Int): Int = {
a + b
}
// 부수 효과가 있는 함수: 상태를 변경하거나 I/O를 수행
var globalState: Int = 0
def addWithSideEffect(a: Int, b: Int): Int = {
globalState += (a + b) // 전역 상태(globalState) 변경 -> 부수 효과
println(s"Global state updated to: $globalState") // 콘솔 출력 -> 부수 효과
a + b
}
// 프로시저: 반환값 없이 부수 효과만 수행
def logMessage(message: String): Unit = {
println(s"Log: $message") // 콘솔 출력 -> 부수 효과
}
// 사용 예제
object SideEffectExample extends App {
println("Pure function result: " + add(3, 5)) // 순수 함수 호출
println("Function with side effect result: " + addWithSideEffect(3, 5))
println(s"Global state is now: $globalState")
logMessage("This is a side effect example.") // 프로시저 호출
}
부수 효과가 있는 함수를 나타내는 분명한 지표는 결과 타입이 Unit 인가 하는 점이다. 어떤 함수가 관심의 대상이 될 만한 값을 반환하지 않는다면, 그런 함수가 주변 세계에 영향을 끼칠 수 있는 유일한 방법은 어떤 형태로든 부수 효과를 통하는 것일 수 밖에 없다.
References
- Programming in Scala 4/e / Martin Odersky