개발자들은 불변성을 강조하곤한다
대체 왜일까?
아무 프로그래밍 언어로 다음 코드를 작성했다고 해보자
count = 99
do_something(count)
print(count)
위 코드에서 다른일을 한게 없다면 우리는 99가 프린트 될거라고 굳게 믿을것이다
이 사실을 믿을 수 없는 세계에서 프로그래밍을 한다고 상상해보자
이 세계에서는 다른코드가 당신이 만든 코드를 바꿀수도 있다
이런일이 일어난다면 분명 화가날것이다
게다가 당신이 만든 코드가 정확한 결과를 반환한다는 보장을 할 수 없게된다
이제 레퍼런스인 경우를 생각해보자
array = [1, 2, 3]
do_something(array)
print(array)
여전히 우리는 print가 [1, 2, 3]을 출력하길 바란다
하지만 대부분의 언어에서 do_something함수는 배열의 레퍼런스를 받는다
만약 이 함수가 배열의 두번째 요소를 변경하거나 값을 지운다면 우리가 예상한 결과를 반환하지 않게된다
이런코드들로 프로젝트를 채우면 코드를 읽기도, 왜 이렇게 동작하는지를 알아보기도 어려워진다
더 나아가 다중쓰레그 환경에서 모든 쓰레드가 이 배열에 접근한다고 가정하면
이 배열의 상태가 어느순간 어느값인지 알아내느라 고심해야한다
이런 일이 발생하는 이유는 만흥ㄴ 프로그래밍 언어에서 자료구조가 불변이 아니어서
안에 있는 애용을 모두 변경할 수 있기때문이다.
그런 코드조각들이 제대로 동작하길 바라는것은 당신에게 상처만 남겨줄것이다
이런 방식의 코드를 지양해야 하는 이유는
goto를 사용하지 않는이유와 유사하다
댓글 0