코딩 사례 연구: 초기 값
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- JavaScript 개발자, 상태 관리 구현에 관심 있는 프론트엔드 개발자
- 난이도: 중간 (객체 참조, Symbol 사용, 상태 추적 논리 이해 필요)
핵심 요약
Symbol
을 사용하여 고유한 초기 값 생성:Symbol
은 객체와 달리 자동으로 고유한 값 생성- 내부 상태 비공개 처리:
get()
메서드는 실제 값 대신null
반환하여 초기 값 유출 방지 - 보조 변수
isInitial
사용:Boolean
타입으로 초기 상태 추적, 복잡한 고유성 검증 제거
섹션별 세부 요약
1. 문제 정의: 일반적인 초기 값 사용의 한계
null
,undefined
,false
,0
외에 고유한 값 필요- 일반 객체
[] === []
는 참조 비교로false
반환 (값은 동일하지만 참조 주소 다름) INITIAL_VALUE
가 동일한 파일에서 공유될 경우, 다른 인스턴스 간 초기 값 유출 가능성
2. 초기 값 고유성 보장 시도 1: 객체 사용
const INITIAL_VALUE = {}
로 초기 값 생성makeValueStore
함수에서internalValue
를INITIAL_VALUE
로 초기화- 문제:
data2.set(data1.get())
로 다른 인스턴스의 초기 값을 불법적으로 사용 가능
3. 초기 값 고유성 보장 시도 2: `Symbol` 사용
const INITIAL_VALUE = Symbol('initial')
로 고유한 값 생성Symbol
은 동일한 이름으로도 다른 값 생성 (객체와 달리===
비교 시 항상false
)get()
메서드에서internalValue === INITIAL_VALUE
시null
반환하여 초기 값 유출 방지
4. 초기 값 고유성 보장 시도 3: `isInitial` 상태 추적
isInitial
이라는Boolean
변수 사용set()
호출 시isInitial = false
로 초기 상태 영구히 변경- 초기 값 고유성 검증 대신
isInitial
상태로 초기 여부 판단 (복잡성 감소)
결론
- 실무 권장사항:
Symbol
은 고유성 보장에 최적,Object
대신 사용get()
메서드는 실제 값 대신null
반환하여 내부 상태 유출 방지isInitial
상태 변수를 사용해 초기 상태 추적 (복잡한 고유성 검증 제거)- 초기 값은 외부에서 직접 접근 불가능하게 설계 (모듈 내부에서만 생성 및 관리)