더북(TheBook)

1.2 안전한 프로그래밍의 이점

지금까지 설명한 내용에서 참조 투명성을 사용할 때 얻을 수 있는 다음과 같은 여러 이점을 생각할 수 있다.

프로그램이 결정적이기 때문에 프로그램을 추론하기 더 쉽다. 입력이 같으면 항상 출력도 같다. 따라서 대대적으로 테스트해도 여전히 그 프로그램이 예기치 않은 어떤 조건에서 깨질 수 있는지 확신할 수 없는 비결정적인 프로그램과 달리 프로그램의 올바름을 증명할 수 있다.

프로그램을 더 쉽게 테스트할 수 있다. 부수 효과가 없으므로 테스트하면서 프로그램 컴포넌트를 외부와 격리하기 위해 쓰는 목(mock)을 사용할 필요가 없다.

프로그램을 더 모듈화할 수 있다. 이유는 입력과 출력만 있는 함수로 프로그램을 구성하기 때문이다. 부수 효과가 없으므로 일부러 처리하지 않아도 되고, 예외를 던지지 않으므로 굳이 잡아낼 필요가 없으며, 문맥 상태 변이가 없으므로 상태를 추적하느라 고민할 필요가 없고, 가변 상태를 공유하지 않으므로 동시 변경이 일어나지 않는다.

프로그램을 훨씬 쉽게 합성하고 재조합할 수 있다. 프로그램을 작성하려면 먼저 필요한 여러 기반 함수를 만들고, 그들을 합성해 더 높은 수준의 함수를 만들며, 원하는 프로그램에 해당하는 함수가 만들어질 때까지 이 과정을 반복한다. 이 과정에서 만들어지는 모든 함수는 참조 투명하다. 따라서 이 함수들을 변경하지 않고도 쉽게 다른 프로그램을 만들 때 재활용할 수 있다.

공유 상태 변이를 피하므로 프로그램이 태생적으로 스레드-안전하다. 이 말이 모든 데이터가 불변이어야만 한다는 뜻은 아니다. 다만 공유하려는 데이터는 모두 불변이어야 한다. 하지만 이런 기법을 적용하는 프로그래머는 곧 불변 데이터가 항상 더 안전하다는 사실을 깨닫게 된다. 심지어 밖에서는 관찰할 수 없는 상태 변이라 할지라도 불변 데이터보다는 덜 안전하다. 이는 어느 시점에는 공유하지 않았던 데이터를 리팩터링으로 인해 나중에 실수로 공유하게 되는 경우가 있기 때문이다. 불변 데이터를 항상 사용하면 이런 문제가 절대 일어날 수 없다.

 

이 장의 나머지 부분에서는 참조 투명성을 사용해 더 안전한 프로그램을 작성하는 예제를 살펴보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.