Ch.4 불변 활용하기: 안정적으로 동작하게 만들기
![post-thumbnail](https://velog.velcdn.com/images/onetuks/post/c74d8d82-e623-4281-975c-991578422c16/image.jpg)
가변
불변
- 상태 변경 불가한 거
- 요즘 프로그래밍 스타일 트랜드
재할당 = 파괴적 할당
- 변수에 값을 다시 할당하는 거
- 변수 재활용 하지 않고, 새로운 변수를 만들어 회피 가능
- 인스턴스 변수에 final 붙이기 → 불변
- 매개변수에 final 붙이기 → 불변
가변으로 인해 발생하는 의도하지 않은 영향
가변 인스턴스 재사용
- 한쪽 변경이 재사용하는 다른쪽에 영향
- 인스턴스 재사용 불가하게 개별 생성
함수로 가변 인스턴스 조작
- 함수를 통해 인스턴스의 상태가 변경됨 → 부수효과
부수효과 단점
- 주요작용 : 메소드가 매개변수 전달받고, 값 리턴하는 것
- 부수효과 : 주요 작용 이외의 상태 변경 일으키는 것
- 즉, 함수 밖에 있는 상태를 변경하는 것 → 메소드 지역변수 외 모든 상태
- 인스턴스 변수 변경
- 전역변수 변경
- 매개변수 변경
- I/O 조작
함수 영향 범위 한정
- 데이터(상태)는 매개변수로 받기
- 상태 변경하지 않기
- 값은 함수 리턴값으로 전달하기
불변으로 만들어서 부수효과 막기
- 기능 변경 때 의도하지 않은 부수효과 있는 함수 생성할 가능성 있으므로, 짜임새 있는 불변 상태 유지가 유효
불변과 가변은 어떻게 다뤄야 할까
기본적으로 불변으로
- 변수 의미 불변 → 혼란 감소
- 동작 안정 → 결과 예측
- 영향 제한 → 유지 보수 용이
가변으로 설계하는 경우
- 성능이 중요한 경우
- 범위가 for문 처럼 작은 경우
상태 변경 메소드 설계
- 뮤테이터 (상태 변화시키는 메소드) 에서도 불변 활용해서 상태 변경을 안정적으로 수행하도록 설계
코드 외부와 데이터 교환 국소화
- I/O, Database, Network 등 외부와의 데이터 교환 최소화
- 레포지토리 디자인 패턴 등 다양한 방식으로 외부와의 상호작용의 영향을 줄여야 한다.