[쏙쏙 들어오는 함수형 코딩] CHAPTER 6. 요약

jiveloper·2023년 10월 29일
0
post-thumbnail
post-custom-banner

CHAPTER 6. 변경 가능한 데이터 구조를 가진 언어에서 불변성 유지하기


함수에서 변경되는 값은 어디서 사용될지 모르기 때문에 값이 변하지 않도록 불변 데이터로 바꾸는 원칙이 필요하다.
이 장은 불변 데이터와, 변경 가능한 데이터를 불변형으로 유지할 수 있도록 하는 카피-온-라이트에 대해 소개한다.



1. 불변 데이터

변수는 언제 어디서 사용될지 모르기 때문에 값을 불변하게 만들어 언제 어디서든 같은 값을 호출할 필요가 있다. 이러한 불변 데이터에 대해 알아보자.

1) 정의

  • 중첩된 모든 데이터 구조가 바뀌지 않는 데이터
  • 최하위부터 최상위까지 중첩된 데이터 구조의 모든 부분이 불변형이어야 함

2) 불변 데이터와 가변 데이터

불변 데이터는 절대 변하지 않는 데이터라고 하면, 반대로 가변 데이터는 변하는 데이터이기 때문에 불변데이터와 쓰이는 곳이 다를 것이다.

둘의 차이를 단순하게 예시로 들자면 불변 데이터는 지역 변수이고 가변 데이터는 전역 변수라고 할 수 있겠다. 불변 데이터는 언제 어디서 읽어도 값이 똑같고, 가변 데이터는 언제 어디서 읽을 때마다 값이 다를 수도 있다.

3장에서 배운 액션, 계산을 토대로 설명을 하자면, "불변 데이터 읽기"는 계산이 되고, "가변 데이터 읽기"는 액션이 될 것이다.


2. 카피-온-라이트

책에서는 액션 대신 계산을 쓰라고 했고, 액션을 쓰더라도 계산을 빼내는 연습을 하라고 하였는데, 그렇다면 가변하는 데이터 말고 불변한 데이터를 쓰는게 맞을까?

모든 곳에서 그러기는 힘들 것이다. 가변하는 데이터를 필요한 곳에서 쓸 때 불변하는 값으로 변경 후 사용하는 게 가장 안전할 것이다.

그래서 나온 것이 카피-온-라이트(Copy-On-Write)이다.


카피-온-라이트란?
1) 변경 가능한 데이터를 불변형으로 유지할 수 있는 원칙

2) 복사본을 만들고(얕은 복사), 원본 대신 복사본 변경
↳ 원본(전역변수)을 사용하는 대신 복사본(지역변수)을 사용하면, 가변 데이터 읽기에서 불변 데이터를 읽는 것이 되므로 계산이 될 것이다.


카피-온-라이트에 대한 내용은 7장에서 더 자세히 설명하겠습니다.

💡 불변 데이터↑ ⇒ 계산↑, 액션↓



👩🏻‍💻 느낀점

나는 평소에 함부로 전역변수를 변경하고 읽는 실수를 하였는데, 이 장을 읽고 전역변수를 변경할 때 카피-온-라이트 방식을 사용하여 전역 변수를 변경하려고 의식적으로 노력하고 있다. 액션을 최소화 하고 계산을 최대화 하자!!!!!!

profile
👩🏻‍💻 Clean Code와 Refactoring에 관심이 많은 개발자 입니다.
post-custom-banner

0개의 댓글