ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Date 타입의 불변성이 보장 되어야 하는 이유
    Javascript/개념 및 설명 2024. 7. 6. 12:48
    728x90
    js-joda나 day.js나 date-fns 등은 immutable 불변성을 보장하여 날짜 및 시간 객체가 변경 불가능 하기 때문에 예기치 않은 오류를 예방 할 수 있다.

     

    로컬 시간대 사용 문제

    Date 객체는 생성할 때 시스템의 로컬 시간대 를 사용합니다. 
    이는 같은 코드라도 실행 환경에 따라 다르게 동작할 수 있습니다
    예를 들어, 동부 호주에서는 "new Date(2013, 0, 1)"이 실제로는 2012년 12월 31일 오후 1시(UTC)로 해석됩니다.
    이는 전 세계 어디에서든 동일한 시간으로 처리되어야 하는 소프트웨어에서는 큰 문제를 일으킬 수 있습니다.

     

    // 동부 호주의 로컬 시간대 (GMT+11)에서 실행된다고 가정
    let date = new Date(2013, 0, 1);
    
    console.log(date.toString());  // 로컬 시간대로 출력
    console.log(date.toUTCString());  // UTC 시간대로 출력

     

    Gregorian 달력 시스템의 특성 문제

    예를 들어, 31일이 모든 달에 유효하지 않기 때문에, Date 객체의 월을 설정(set)할 때, 유효하지 않은 날짜가 될 수 있습니다.
    JavaScript는 이러한 상황에서 자동으로 날짜를 조정합니다. 예를 들어, 12월 31일에서 월을 11월로 변경(set)하려고 하면,
    실제로는 "11월 31일"이 유효하지 않으므로 JavaScript는 이를 "12월 1일"로 자동 변환합니다.
    이는 프로그래머가 의도하지 않은 결과를 초래할 수 있습니다.

     

    // 2013년 12월 31일을 나타내는 Date 객체 생성
    let date = new Date(2013, 11, 31); // 11월이 12월을 나타냄 (0부터 시작)
    
    console.log(date.toString()); // 2013년 12월 31일 출력
    
    // 월을 11월로 설정 (11월 31일은 존재하지 않음)
    date.setMonth(10); // 10월이 11월을 나타냄
    
    console.log(date.toString()); // 의도하지 않은 2013년 12월 1일 출력

     

    Reference

    - https://d2.naver.com/helloworld/645609

    - https://unspecified.wordpress.com/2013/08/02/why-you-should-never-mutate-a-javascript-date/  

    - https://jojoldu.tistory.com/600

     

     

    728x90

    'Javascript > 개념 및 설명' 카테고리의 다른 글

    정독 3번이상  (0) 2021.09.10
Designed by Tistory.