신뢰할 수 없는 코드베이스에서 불변성 유지하기

Raymond Yoo·2023년 12월 11일
0
post-thumbnail

앞에서 함수형 프로그래밍을 소개하면서
'실용적' 이라는 단어를 사용했다.
프로그래머 입장에서 실용적이라는 말은
자신이 현업에서 다루고 있는 프로젝트에
즉시 적용할 수 있다는 의미이다.
하지만 소위 레거시코드 라고 부르는 프로젝트들은
함수형 프로그래밍의 원리에서 약속한
함수의 순수성, 변수의 불변성을 거의 존중하지 못하는 방식으로
구현되어 있을 것이다.

그런 코드베이스를 다루고 있는 프로그래머이더라도
위에서 언급한 함수형 프로그래밍의 원리를
빠르게 적용할 수 있는 방법이 있다.
'방어적 복사' 라는 방식을 채택하면 된다.

방어적 복사

방어적 복사는 간단하다.
위험한 함수, 즉 순수하지 않은 함수(impure funtion)을
호출하기 전에 전달하는 파라미터를 우선 복제한다.
그리고 이 복제본은 함수 호출 시 아규먼트로 사용한다.
그러면 함수를 호출하기 전에 먼저 선언했던 변수의 불변성을
명시적으로 보장할 수 있다.
함수의 실행이 완료되면 이 함수는 실행 결과를
리턴값이나 전역변수 등 어떤 방식으로든 되돌려준다.
이렇게 받은 결과를 사용해서 다음 로직을 진행하기 전에
먼저 한번 복제해서 사용하기로 한다.

순수 함수라는 것을 확실하게 알고 있는 함수를 호출할때는
이미 내부적으로 Copy-On-Write 원리를 적용하고 있을 것이므로
방어적 복사를 하지 않고 곧바로
함수의 입출력값을 사용해도 될 것이다.
물론 일말의 불안감이라도 있다면
방어적 복사를 더 폭넓게 적용할 수도 있다.

<참조>

책, 쏙쏙 들어오는 함수형 코딩 7장, 에릭 노먼드, 김은민, 2022

profile
세상에 도움이 되고, 동료에게 도움이 되고, 나에게 도움이 되는 코드를 만들고 싶습니다.

0개의 댓글