수학에서의 참조 투명성

x = 2 + (3 * 4)
//이 수식을 다음과 같이 변경해도 결과는 똑같다.
x = 2 + 12

프로그래밍에서의 참조 투명성

int add(int a, int b) {
    return a + b
}

int mult(int a, int b) {
    return a * b;
}

int x = add(2, mult(3, 4));

참조 투명하지 않은 예

int add(int a, int b) {
    int result = a + b;
    System.out.println("Returning " + result);
    return result;
}

var result = add(3, 4);

명령형 프로그래밍에서 참조 투명성

명령형 프로그램과 함수형 프로그램 모두에서 함수를 사용한다. 함수형 프로그램에서는 함수만 사용하지만 명령형 프로그램에서는 다음과 같이 3가지 함수를 사용한다.

  1. 순수 함수 : 사이드 이펙트가 없음. (프로그램의 상태 변경X)
  2. 순수 이펙트 : 사이드 이펙트만 일으키는 함수. (프로그램의 상태만 변경함)
  3. 사이드 이펙트가 있는 함수 : 값을 리턴하기도하고 프로그램의 상태도 바꾸는 함수.