C언어

[C언어] 사이드 이펙트 side effect

코딩 메모장 2024. 9. 25. 22:56
728x90

일반적으로 side effect라하면 부정적으로 생각하기 쉬운데 C언어에서 사이드 이펙트(Side Effect) 는 부정적인 표현이 아닙니다. C 언어에서의 사이드 이펙트는 함수나 표현식의 평가가 그 결과 외에 추가적인 상태 변화를 일으키는 경우를 말합니다. 특히, 변수의 값이 변경되거나, 입출력이 발생하는 등의 행동이 포함됩니다. 

사이드 이펙트의 예시

변수 변경

int x = 10;
x = x + 5; // x의 값이 변경됨, side effect 발생

함수 호출

void increment(int *n) {
    (*n)++;
}

int main() {
    int a = 5;
    increment(&a); // a의 값이 변경됨, side effect 발생
}

입출력

printf("Hello, World!\n"); // 출력으로 인해 상태가 변화함, side effect 발생

사이드 이펙트의 중요성

  • 디버깅: 사이드 이펙트가 많은 코드는 디버깅이 어려워질 수 있습니다. 변수의 상태 변화가 예상치 못한 결과를 초래할 수 있기 때문입니다.
  • 병렬 처리: 사이드 이펙트가 있으면 여러 스레드에서 동시에 접근할 때 문제가 발생할 수 있습니다. 상태가 공유될 경우, 데이터 경합이 발생할 수 있습니다.
  • 함수형 프로그래밍: 함수형 프로그래밍에서는 사이드 이펙트를 최소화하려고 하며, 이는 코드의 예측 가능성을 높이는 데 기여합니다.

사이드 이펙트를 피하는 방법

  1. 불변 데이터 사용: 데이터를 변경하지 않고 새로운 값을 반환하는 방식을 사용합니다.
  2. 순수 함수 작성: 입력 값만을 사용하여 결과를 계산하고, 외부 상태를 변경하지 않도록 합니다.
  3. 명확한 문서화: 사이드 이펙트가 있는 함수는 이를 명확히 문서화하여 사용자가 이해할 수 있도록 합니다.
728x90