class Todo {
  #data = {
    id: this.createTodoUniqueId(),
    content: '',
    isDone: false,
    labels: []
  };

  /**
   * @constructor
   * @param {number} id - 할 일의 unique한 id
   * @param {string} content - 할 일
   * @param {boolean} isDone - 할 일이 완료되어있는 상태인지 아니인지
   * @param {('LOW' | 'MIDDLE' | 'HIGH')} priority - 할 일의 중요도가 어느 정도인지(ordinal scale)
   * @param {string[]} labels - 할 일에 대한 상세 라벨 ex) ['공부', '운동']
   */
  constructor(content, isDone, priority, labels) {
    this.#data.content = content;
  }

  /**
   * @private
   * @function createTodoUniqueId
   * @description 할 일의 unique한 id를 만듭니다
   * @return {number} todoId
   */
  createTodoUniqueId() {return 1234;}

  /**
   * @description 할 일의 내용을 새로운 값으로 갱신
   */

  get description (){
    return this.#data;
  }

  /**
   * @function
   * @description set new content
   * @param {string} newValue
   */
  set content(newValue) {
    this.#data.content = newValue;
  }

  set isDone(isDone) {
    this.#data.content = isDone;
  }

  set prioriy
}

const bad = new Todo( 'zz', false, 'LOW', ['hello', 'bye']);

// bad.content = 'kdsfjakfjsadk';
console.log(bad.content = 10);
console.log(bad.description);

TodoList jsdoc 설계 미션을 진행하며 # private keyword 를 사용해 클래스 내부에서 사용하는 데이터를 private로 관리하기로 했다. 그리고 getter, setter를 설정해 이를 통해서만 값이 변경 될 수 있게 하고자 했다. Todo.data = {} 와 같은 위험한 상황이 일어날 수 있기 때문에.. 그리고 타입스크립트를 사용하지 않기 때문에 깐깐한 검증이 필요할 것 같았다. 그에 대한 로직을 setter에 담으면 깔끔게 관리되지 않을까 생각했다. 재진님이 고통 받지 않으시길...