And Brain said,
불변성(Immutability), 변하지 않는 것 본문
프로그래밍에서 변하지 않는 것을 찾기란 쉽지 않다.
그런데 도대체 변하지 않는 것들은 왜 필요한 걸까?
Redux에서는 변하지 않는 상태 객체를 저장함으로써 시간을 달려 과거로 갈 수 있다.
이는 아래에서 다시 설명하도록 하겠다.
자, 오늘은 이 불변성의 목적과 이점에 대해 얘기하고자 한다.
먼저, 불변성에 대해 알아보자.
불변성이란, 변하지 않는 성질이다.
이게 끝이다.
프로그래밍적으로 좀 더 자세히 말하자면, 변수 영역의 값은 변하지 않고 값을 재할당할 시에 참조하던 메모리 주소값만 변경시키는 것이 불변성을 가진 변수다.
이제 Java의 String에 대해 살펴보자.
Java의 String은 불변하는 참조타입이다.
String 객체는 따로 String constant pool에서 관리하는데 이는 Heap의 영역에 할당돼 있다.
이로 인해 Java의 문자열 데이터는 스택 메모리가 아닌 Heap 영역 중에서 String constant pool에 메모리를 할당하여 값을 저장하고, String 변수는 바로 그 값을 참조한다.
이러한 방식으로 인해 String 변수를 재할당한다 하더라도 참조값만이 변경될 뿐 실제 그 변수의 데이터가 변경된 것은 아니다.
Java String은 이런 불변성 덕분에 메모리 절약, 보안, Thread-Safe 등의 이점을 얻을 수 있게 된다.
또한, 실무에서 사용되는 Java의 객체들은 대부분 불변객체를 사용한다.
마찬가지로 객체의 불변성을 지킨다면 Thread-Safe 같은 이점과 여러가지 사이드 이펙트에서 안전하다.
다음은, Javascript의 경우를 보자.
JS에서도 불변성은 중요한데, 특히 현재 대세인 함수형 프로그래밍에서 중요해진다.
변수에 불변성이 보장되지 않아서 외부에 선언된 변수가 함수만 들어가면 값이 변해선 안되지 않겠는가?
원시타입 변수를 선언한다면 불변성이 지켜질 것이고 배열처럼 참조타입 변수를 수정한다면 불변성이 깨질 것이다.
또한, React에서는 이런 불변성을 지켜 상태 변화를 감지할 수 있고 관리할 수 있다.
바로 이 불변성 덕분에 Redux의 시간여행이라는 아름다운 개념이 가능해진다.
Redux는 이전 상태 객체를 저장하고 그 상태는 불변하는 순수한 상태 객체로 만든다.
그리고 상태를 수정할 일이 생기면, 그 상태를 복사하고 나온 복사본을 수정하는 방식으로 불변성을 유지한다.
이 덕분에 각각은 변하지 않는 상태 객체가 된다.
이로인해 이전 상태로 손쉽게 시간을 달려 돌아갈 수 있게된다.
함수형 프로그래밍이 대두되고 있는 지금 불변성의 개념은 꽤 중요한 개념이다.
소개한 언어들 이외에도 여러가지 언어에서 불변성이 존재하니 알아두면 도움이 될 것이다.
Thanks for watching, Have a nice day.
References
https://readystory.tistory.com/139
https://evan-moon.github.io/2020/01/05/what-is-immutable/
'IT > DevOps \ Architecture' 카테고리의 다른 글
RabbitMQ, 비동기 메시지 큐를 위한 신문사 (0) | 2023.03.11 |
---|---|
VirtualBox, 광활한 오픈월드 속으로 (0) | 2023.03.10 |
MSA | Netflix OSS로 보는 MSA의 골격 (0) | 2022.10.27 |
Agile 방법론 | Scrum (2) | 2022.10.26 |
쿠키, 세션, 토큰, 캐시, CDN (6) | 2022.10.23 |