3장을 마무리했다.
3장의 마지막 내용은 불변성의 장점과 단점에 대한 내용이었다. 이 부분의 예제 코드에서 Coroutine을 사용한 부분이 나왔는데, 현재 Kotlin 버전과는 맞지 않는 문법인 것 같아서 찾아보고 적용시켰다. 다만 아직 Coroutine에 대한 이해가 많이 부족해서, 책의 후반부에 나오는 Coroutine에 대한 내용과 함께 지금 버전에 맞는 사용법을 추가로 공부해야 할 것 같다.
불변성의 장점
스레드 안전성
여러 스레드에서 동시에 같은 데이터에 접근할 때, 전통적인 방식에서는 잠금-해제와 동기화 같은 것을 이용해서 스레드 안전성을 보장해야 한다. 하지만 불변성을 이용하면 간단히 이것을 해결할 수 있다.
낮은 커플링
스레드 사이의 의존성을 커플링이라고 한다. 불변성을 이용할 때 각 스레드가 같은 데이터에 처음 접근한 이후에는 다른 변수를 통해 동작하기 때문에 커플링이 낮다.
참조 투명성
표현식이 항상 같은 결과를 내놓는 것으로 불변성과 순수 함수를 통해 구현될 수 있다.
실패 원자성
커플링이 낮기 때문에 하나의 스레드가 실패하더라도 다른 스레드에 영향을 미칠 확률이 적다.
캐싱
오브젝트가 변하지 않으므로 캐싱을 사용해서 성능을 향상시킬 수 있다.
컴파일러 최적화
변하지 않는 오브젝트로 인해 컴파일러를 최적화하기 쉽다.
순수 함수
불변성을 이용해서 순수 함수가 구현될 수 있다.
불변성의 단점