불변성이란?
메모리에 한번 저장한 정보가, 삭제될때까지 변하지 않는 특징
불변성이 필요한 이유는?
"불변성이 필요하다"는 말의 의미는
"변하면 안된다"와 동일하기 때문에,
메모리에 한번 저장한 정보가, 삭제될때까지 무한정 변할 수 있을때 발생하는 문제를 살펴보면
거꾸로 불변성의 필요를 알 수 있을 것이다.
문제
변하지 않아야하는 값이, 실행중(runtime)에 변한다.
변하지 않아야 하는 값:
게임 - 몬스터 레벨, 레벨당 레벨업 경험치
물리 - 중력 가속도, 원주율
원인
개발자가 프로그램을 잘못 작성했다.
=> 변하지 않아야 하는 값을 변경하는 코드를 작성했다.
결과
"많은 시간"을 들여, 컴파일과정을 모두 거침 => 실제 실행환경에서 에러가 "드물게" 발생
개발자가 오류를 수정하기는 커녕, 존재자체를 모를 가능성이 높아짐.
오류가 발견하였더라도, 수정과정에서 컴파일과정을 "전부" 수행해야함
욕구
개발자가 한번 선언 이후 변하지 않아야하는 변수를 작성하고도,
이를 위반해 변수를 수정했다면
컴퓨터가 알려줬으면 좋겠다. ( 날 가르쳐라 )
=> 코드 작성시, 컴퓨터에게 알려줘야 한다.
"이 변수의 값은 한번 선언하고 안바꿀거니까, 나중에 내가 실수하면 알려줘!"
=> 오류 발생 확률 0% => 추적할 필요가 없음
상수와의 공통점, 차이점
공통점
값이 할당된 이후에, 절대 변하지 않음
차이점
값 할당 시점 (allocation)
상수 - 컴파일 시간에 값이 할당됨
불변성 변수 - 런타임 시간에 값이 할당됨 (변수의 특징 - 불변성과는 관계 X)
목적 시점
상수
- 실제 실행전에 알 수 있는, 이미 정해진 값을, 컴파일 시점에 저장
- 개발자가 값의 의미를 잘 이해할 수 있도록 하면서, runtime 성능도 유지 ( 컴파일과정에 처리 되므로 )
불변성 변수
- 실제 실행하기 전까지 미리 알 수 없는 값들을 저장
- 개발자가 런타임 에러를 발생시키는 코드 작성하는 것을 방지하기 위함
반응형