원거리 동작(컴퓨터 프로그래밍)

Action at a distance (computer programming)

원거리 동작은 프로그램의 다른 부분에서의 작동을 식별하기 어렵거나 불가능함에 따라 프로그램의 한 부분에서의 행동이 크게 변화하는 컴퓨터 과학반패턴이다.

원거리 동작과 관련된 문제를 피하는 방법은 적절한 설계로, 글로벌 변수를 피하고 통제되고 국소적인 방식으로만 데이터를 변경하거나, 참조 투명성을 가진 순수한 기능 프로그래밍 스타일의 사용이다.

이 용어는 물리학에서 멀리 떨어진 곳의 작용 개념을 바탕으로 하는데, 글루온과 같은 중재자 입자 없이도 물체가 상호작용을 할 수 있도록 하는 과정을 가리킬 수도 있다. 특히 알베르트 아인슈타인은 양자 비독점성을 "멀리서 무시무시한 행동"이라고 언급했다.

프로그램 구성요소가 잘못된 시간에 무언가를 하고 있거나, 또는 해서는 안 되는 무언가에 영향을 미치기 때문에 먼 곳에서 동작으로 인한 소프트웨어 버그가 발생할 수 있다. 그러나 어느 구성 요소에 책임이 있는지 추적하기는 매우 어렵다. 무고한 행동으로 인한 부작용은 프로그램을 알 수 없는 상태로 만들 수 있으므로 현지 데이터가 반드시 국부적인 것은 아니다. 이 특정 시나리오의 해결책은 어떤 요소들이 다른 요소들과 상호 작용해야 하는지를 정의하는 것이다. 프로그램 부분 간의 인터페이스를 정확하게 정의하고 공유 상태를 피하는 적절한 설계는 멀리 떨어진 곳에서 작용에 의해 야기되는 문제를 크게 제거할 수 있다.

이 예는 Perl 프로그래밍 언어에서, 특히 거리에서 심각한 행동 사례를 보여준다(참고). $[ 변수는 이후 버전의[1] Perl에서 더 이상 사용되지 않음:

배열 지수는 일반적으로 0에서 시작되는데, 그 이유는 $[ 일반적으로 0이며, 설정한 경우 $[ 1번에서 1번으로, 그리고 나서 배열이 1번에서 시작되는데, 그것은 Fortran 프로그래머들을 행복하게 만들었고, 그래서 우리는 이런 예들을 볼 수 있다. perl(3) 남자 페이지:

앞을 내다 $num ($[ .. $#entry) {     인쇄하다 "$num\t'",달러 입국[$num],"\n"; } 

그리고 물론 당신은 설정 할 수 있다. $[ 어레이를 0 또는 1이 아닌 17 또는 4와 같은 임의의 숫자로 시작하려면 이것은 모듈 작가들을 방해하는 훌륭한 방법이었다.

다행히 제정신이 팽배했다. 이러한 특징들은 이제 실수였다는 것을 인식하게 되었다. perl5 짐꾼들의 메일링 리스트에는 이제 그러한 특징에 대한 캐치프레이즈가 있다: 그것들은 "멀리서 행동"이라고 불린다. 원칙은 프로그램의 한 부분에서의 선언이 프로그램의 일부 다른 부분의 행동을 과감하고 눈에 띄게 변화시켜서는 안 된다는 것이다.

Mark Jason Dominus, Sins of Perl Revisited[2]

물체에 걸친 원거리에서의 작용

적절한 객체 지향 프로그래밍은 먼 거리에서 동작을 피하는 설계 원리를 포함한다.

데메터 법칙은 물체는 자기 주변의 다른 물체들과만 상호작용해야 한다고 명시하고 있다. 시스템의 먼 곳에서 조치가 필요할 경우 메시지를 전파하여 실행해야 한다. 적절한 설계는 멀리 떨어진 곳에서 발생하는 동작의 발생을 심각하게 제한하여 유지 가능한 프로그램에 기여한다. 빈약한 인터페이스 설계에서 물체를 창조하라는 압박은 아마도물체의 형태를 취하거나, 참된 물체를 구현하지 않거나, 데메터의 법칙에 주의를 기울이지 못하는 결과로 나타날 수 있다.

기능 프로그래밍의 장점 중 하나는 멀리 떨어진 곳에서 이루어지는 동작이 강조되지 않고, 때로는 소스 언어로 전혀 표현할 수 없을 정도로 강조된다는 점이다.

설계에 대한 원거리 동작 허용의 위험성을 인식하고 원거리 동작의 존재를 인식할 수 있는 것은 정확하고 신뢰할 수 있으며 유지보수가 가능한 프로그램을 개발하는 데 유용하다. 프로그램 비용의 대다수가 유지관리 단계에 있을 수 있으며, 원거리에서의 조치가 유지보수를 어렵게 하고, 비용이 많이 들고, 오류가 발생하기 쉽다는 점을 감안할 때, 설계 중 피해야 할 가치가 있다.

참고 항목

참조