아이템 1: 가변성을 제한하라


코틀린은 모듈로 프로그램을 설계한다. 모듈은 클래스, 객체, 함수, 타입 별칭, 톱 레벨 프로퍼티 등 다양한 요소로 구성된다.

이러한 요소 중 일부는 **상태(state)**를 가질 수 있다.

var를 사용하거나 mutable을 사용하는 경우.

상태를 갖는 것은 양날의 검이다. 시간의 변화에 따라 변하는 요소를 표현할 수 있지만 상태를 적절하게 관리하는 것이 어렵다.

  1. 프로그램을 이해하고 디버그하기 힘들어진다. → 상태를 갖는 부분들의 관계를 이해해야 함
  2. 가변성이 있으면 코드의 실행을 추론하기 어려워진다. → 시점에 따라 값이 달라질 수 있기 때문
  3. 멀티스레드 프로그램인 경우 적절한 동기화 필요. → 변경이 일어나는 모든 부분에서 충돌 발생 위험
  4. 테스트하기 어렵다. → 변경이 많을수록 더 많은 조합을 테스트해야 한다.
  5. 상태 변경이 일어날 때 다른 부분에 알려야 하는 경우가 있다.

코틀린에서 가변성 제한하기