더북(TheBook)

1.1.1 안전하게 부수 효과 처리하기

앞에서 사용한 효과(effect)라는 말은 외부 세계와의 모든 상호 작용을 뜻하는 말이었다. 콘솔에 메시지를 출력하거나 파일, 데이터베이스, 네트워크 등에 데이터를 쓰거나 컴포넌트 범위 밖에 있는 어떤 다른 원소를 변경하는 일을 이런 상호 작용의 예로 들 수 있다. 프로그램은 일반적으로 자신만의 영역이 있는 작은 블록으로 이뤄진다. 어떤 언어는 이런 블록을 프러시저(procedure)라고 부르고, 다른 언어(자바 등)는 메서드(method)라고 부른다. 코틀린에서는 이런 블록을 함수(function)라 한다. 하지만 코틀린에서 사용하는 함수라는 용어는 수학 함수와 같은 개념을 뜻하지는 않는다.

코틀린 함수는 기본적으로 메서드다. 자바나 다른 모든 현대적 언어와 마찬가지다. 메서드라는 코드 블록에는 영역(scope)이 있다. 영역이란 말은 코드 블록 안에서 볼 수 있는 정의나 선언이 프로그램의 어떤 범위에 속하는지를 뜻한다. 블록은 그 자신이 둘러싸고 있는 영역을 볼 수 있을 뿐만 아니라 자신의 바깥쪽 영역을 볼 수 있고, 추이적(transative)으로 자신을 둘러싼 영역을 감싸는 더 바깥쪽 영역을 볼 수 있어서 최종으로는 가장 바깥 영역에 이르는 모든 영역을 볼 수 있다. 함수나 메서드가 외부 영역의 상태를 바꾸는 것(바깥 영역을 바꾸는 것을 뜻한다. 예를 들어 메서드가 정의된 클래스는 메서드의 바깥 영역이다)이 바로 효과다.

일부 메서드(함수)는 값을 반환한다. 일부 메서드는 세계의 상태를 변경한다. 일부 메서드는 값을 반환하는 동시에 상태를 변경하기도 한다. 값을 반환하는 메서드나 함수가 외부 상태를 변경하는 경우 이를 부수 효과(side effect)라고 한다. 부수 효과를 사용하는 프로그램은 잘못된 것이다. 의약품과 관련해 ‘부작용’이라는 말은 주된 약효 외에 나타나는 부수적인 효과를 뜻하기보다는 부정적인 효과를 뜻하는 경우가 많다. 프로그래밍에서 부수 효과는 프로그램이 반환하는 결괏값에 덧붙여 프로그램 밖에서 관찰할 수 있는 어떤 변화를 뜻한다.

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