AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

코딩 사례 연구: 초기 값

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • JavaScript 개발자, 상태 관리 구현에 관심 있는 프론트엔드 개발자
  • 난이도: 중간 (객체 참조, Symbol 사용, 상태 추적 논리 이해 필요)

핵심 요약

  • Symbol을 사용하여 고유한 초기 값 생성: Symbol은 객체와 달리 자동으로 고유한 값 생성
  • 내부 상태 비공개 처리: get() 메서드는 실제 값 대신 null 반환하여 초기 값 유출 방지
  • 보조 변수 isInitial 사용: Boolean 타입으로 초기 상태 추적, 복잡한 고유성 검증 제거

섹션별 세부 요약

1. 문제 정의: 일반적인 초기 값 사용의 한계

  • null, undefined, false, 0 외에 고유한 값 필요
  • 일반 객체 [] === []는 참조 비교로 false 반환 (값은 동일하지만 참조 주소 다름)
  • INITIAL_VALUE가 동일한 파일에서 공유될 경우, 다른 인스턴스 간 초기 값 유출 가능성

2. 초기 값 고유성 보장 시도 1: 객체 사용

  • const INITIAL_VALUE = {}로 초기 값 생성
  • makeValueStore 함수에서 internalValueINITIAL_VALUE로 초기화
  • 문제: data2.set(data1.get())로 다른 인스턴스의 초기 값을 불법적으로 사용 가능

3. 초기 값 고유성 보장 시도 2: `Symbol` 사용

  • const INITIAL_VALUE = Symbol('initial')로 고유한 값 생성
  • Symbol은 동일한 이름으로도 다른 값 생성 (객체와 달리 === 비교 시 항상 false)
  • get() 메서드에서 internalValue === INITIAL_VALUEnull 반환하여 초기 값 유출 방지

4. 초기 값 고유성 보장 시도 3: `isInitial` 상태 추적

  • isInitial이라는 Boolean 변수 사용
  • set() 호출 시 isInitial = false로 초기 상태 영구히 변경
  • 초기 값 고유성 검증 대신 isInitial 상태로 초기 여부 판단 (복잡성 감소)

결론

  • 실무 권장사항:
  • Symbol은 고유성 보장에 최적, Object 대신 사용
  • get() 메서드는 실제 값 대신 null 반환하여 내부 상태 유출 방지
  • isInitial 상태 변수를 사용해 초기 상태 추적 (복잡한 고유성 검증 제거)
  • 초기 값은 외부에서 직접 접근 불가능하게 설계 (모듈 내부에서만 생성 및 관리)