728x90
불변성
불변성
⸰ 한 번 생성 후 변하지 않는 것
⸰ 예상 가능하고, 신뢰할 수 있는 코드를 지향하기 위하여 사용해야 함
Immutable type
⸰ 원시 타입(Boolean
,String
,Number
,Null
,Undefined
,Symbol
)
⸰ 메모리 영역 안에서 불변하며, 새로운 값이 재할당
let name = 'foo';
name = 'bar';
name 은 새로운 값이 재할당 됨
Mutable type
⸰ 객체 타입(Object
,Array
,Map
등)
⸰ 변할 수 있는 값이며, 직접적으로 변경 가능
let x = ['foo'];
x.push('bar');
console.log(x); // ['foo', 'bar']
x.push('bar') 라는 코드를 보지 못한다면, x = ['foo'] 라고 생각하여 잘못 코드를 작성할 수도 있음
map( )이나, 스프레드 연산자 [...array, 'bar'] 같이, 원본 배열을 변경하지 않는 방식 > 불변성을 지키는 방식
참조 투명성
참조 투명성
⸰ 동일한 입력 값에 항상 동일한 출력 값을 보장하는 특성
⸰ 함수가 외부 상태에 의존하지 않고, 전달받은 인자에만 의존
⸰ 함수가 전역 변수를 참조 X, 변경 X > 신뢰성 증가
참조 투명성을 지키는 방법
⸰ 전역 변수를 관리하는 전용 객체를 따로 생성하여 사용
⸰ 전역 변수를 참조하는 함수는 전역 변수를 파라미터로 받아야 함
⸰ 랜덤 값 생성하는 코드도 외부 입력으로 처리해야 함
function generateRandom(randomFunc) {
return randomFunc();
}
const randomValue = generateRandom(Math.random);
console.log(randomValue);
// Testing example
function mockRandom() {
return 0.5;
}
const mockValue = generateRandom(mockRandom);
console.log(mockValue); // 0.5
728x90
'💠프로그래밍 언어 > JavaScript' 카테고리의 다른 글
[심화] 비동기 함수 Promise, async/await 파헤치기 (0) | 2024.07.29 |
---|---|
[심화] 이벤트를 발생시키는 EventEmitter (0) | 2024.07.25 |
[심화] JSON.stringify / JSON.parse에 대해 알아보자 (0) | 2024.07.17 |
[심화] 전역변수도 매개변수로 하는 이유는 무엇일까? (0) | 2024.07.15 |
[심화] 사용자에게 입력 받는 방법 구현하기 (0) | 2024.07.11 |