# Value Context vs Identifier Context

# Value Context

변수가 메모리에 저장이 된다.
메모리에 1번 주소와 2번 주소에 3을 각각 넣는다.
메모리 주소와 관계 없이 값이 같으면 같다라고 판단한다.
값은 메모리 주소가 중요치 않다.

값의 정의

# 특징

  1. 끝 없는 복사본
    • 값을 할당/함수의 인자 → 언제나 복사본을 만든다
  2. (강제적으로) 상태 변화에 안전하다
    • 불변성을 통해서 안전하지만, 관리하기 어렵다.
    • 값을 관리하기 위해서 함수형 프로그래밍이 등장.
  3. 연산을 기반으로 로직을 전개
    • 수학적 프로그래밍은 굉장히 복잡한 도메인의 연산을 표현하기 어렵다.

# Identifier Context

heap 메모리에 들어가 있는 객체 O 가 있다.
A 라는 변수도 O 를 가리키고,
B 라는 변수도 O 를 가리키면,
A 와 B 는 같다 라고 한다.
똑같은 메모리에 있는 주소를 가리킴

# 특징

  1. 하나의 원본
  2. 상태 변화를 내부에서 책임짐
    • 만들기 어렵다
  3. 메세지를 기반으로 로직을 전개
const a = { a: 3, b: 5 };
const b = { a: 3, b: 5};
console.log(a === b); // false, Identifier Context
console.log(JSON.stringify(a) === JSON.stringify(b)); // true, Value Context
1
2
3
4

# 객체지향은 철저하게 Value Context 를 배제한다.

반대로 함수형 프로그래밍에서 Identifier 를 쓰면 버그가 나타날 수 있다

객체지향에서 인자로 primitive → 버그 발생
좀 더 나아가

  • Number 가, 어떤 것은 Age 로서, 어떤것은 Money 로써..등 이유를 생각하고 객체로 만들어야 한다.
  • 값을 받을 수 있는 메서드는, 생성자 인자밖에 남지 않을 것임