[오늘의 배움] Referential Transparency란?

이상민·2022년 2월 14일
0

[오늘의 배움]

목록 보기
67/70
post-thumbnail

참조 투명성

레퍼렌셜 트랜스페런시(참조 투명성)란 컴퓨터 프로그램의 특성 중 하나로, 어떠한 표현식이 프로그램의 행동에 영향 없이 직접적인 값으로 대체 가능한 것을 말한다. 그렇기 위해서는 한 눈에 보이는 연산 이외에는 사이드 이펙트를 가지지 말아야한다.

특정 입력에 대해서 반드시 동일한 결과를 보장하는 수학적 함수(또는 순수 함수)를 생각해볼 수 있다. 사이드 이펙트가 없기 때문에 가독성이 좋고, 리팩토링이 용이하며 컴파일러가 최적화를 하기에도 쉽다.


참조 투명성 예시

사인 값을 구하는 함수 sin()을 사용한 x = sin(x)은 투명하다. x 값은 항상 같다. 오늘 날짜를 반환하는 함수 today()를 사용한 date = today()는 불투명하다. 오늘 날짜에 따라 date의 값은 변화한다.

위에서 말한 것처럼 직접적인 값으로 모든 피연산자가 대체 가능하면 참조 투명하다.

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

// 아래는 모두 참조 투명하다 
int ten1 = 5 + 5;
int ten2 = 5 + add(2, 3);
int ten3 = add(2,3) + add(1, 4);

단순히 반환하는 결과 값이 같다고 참조가 투명한 것도 아니다. 사이드 이펙트가 있는 아래 예시를 생각할 수 있다.

// 글로벌 변수
int g = 0;

// 참조 투명한 함수
int rt(int x) {
    return x + 1;
}

// 참조 불투명한 함수
int ro(int x) {
    g++;
    return x + 1;
}
profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글