Skip to main content

250909


시티스칸

  • 안 - 개인휴가

어제자 출력, 입력

(5겅구)공문 7월,8월분 어제 제목바꾼거 cmrs업로드

0201-99-199

공문접수 회람


엑셀에 분류코드 자주 쓰는것만 정리



독거미 한영키 안될때 Fn + W


자바

  • 깊이우선탐색순회 ok
  • 너비우선탐색순회 ok
  • 시험장 나누기 마저하기 집
  • 1부터 N까지 숫자 중 합이 10이 되는 조합 구하기
  • 시간 남으면 길찾기 게임 내일
  • 해시셋 내일
  • Promise 내일 자세히


자바스크립트 - 이 정도가 있더라 ok

  • 스프레드연산자 ...YourArrapy/ 레스트매개변수/심벌/클래스 ok
  • 배열복사
    • arr.slice()
    • const copy = [...original]
    • Array.from()
  • shallow copy → 내부 객체 공유, 원본 변화 가능
  • deep copy → 모든 단게 새 객체, 원본 변화 없음
    • JSON.parse(JSON.stringify(obj))
    • structuredClone(obj)
  • 클래스 선언, 클래스 표현식은 호이스팅 되지 않는다. 클레스에 접근하기 전에 선언하지 않으면 ReferenceError
    • static으로 선언된 메서드는 클래스 자체에서만 접근 가능
    • 인스턴스에서는 접근 불가능


Promise

image.png


객체에 함수 추가

image.png


객체 속성 동적으로 정의하는법

image.png


에크마스크립트 버전


JSON.parse(JSON.stringfy(obj))

const original = [{a: 1}, {b: 2}];
const copy = JSON.parse(JSON.stringify(original)); // 깊은 복사

copy[0].a = 100;

console.log(original[0].a); // 1 ← 원본은 그대로
  • JSON방식으로 문자열로 변환 → 다시 객체로 복원
  • 원본과 복사본 완전 분리
  • 깊은 복사는 함수, undefined, Symbol, 순환참조 처리X

1. 함수, undefined

const original = {
  a: 1,
  b: undefined,
  c: function() { return 2; }
};

const copy = JSON.parse(JSON.stringify(original));

console.log(copy); 
// 출력: { a: 1 }
// b와 c가 사라짐!
const sym = Symbol('id');
const original = { a: 1, [sym]: 123 };

const copy = JSON.parse(JSON.stringify(original));

console.log(copy); 
// 출력: { a: 1 }
// Symbol 속성은 복사되지 않음

JSON 으로 변환할 때

  • undefined 무시
  • 함수 무시
  • Symbol 키나 값도 JSON으로는 복사 안 됨

그래서 복사본에서는 사라짐

2. 순환 참조 (Circular Reference)

const original = { a: 1 };
original.self = original; // 자기 자신을 참조

try {
  const copy = JSON.parse(JSON.stringify(original));
} catch (err) {
  console.log(err.message);
}
// 출력: Converting circular structure to JSON
  • JSON은 순환 참조 처리 못해서 에러 발생
  • structuredClone()은 순환참조 지원
// 원본 객체
const sym = Symbol('id');
const original = {
  a: 1,
  b: undefined,
  c: function() { return 2; },
  [sym]: 123
};

// 순환 참조 추가
original.self = original;

// 깊은 복사 (structuredClone 사용)
const copy = structuredClone(original);

// 확인
console.log(copy);

// 테스트
console.log(copy.a);       // 1
console.log(copy.b);       // undefined
console.log(typeof copy.c); // function
console.log(copy.self === copy); // true, 순환 참조 유지
console.log(copy[sym]);    // 123


심볼쓰는이유

객체 속성을 외부에서 안전하게 숨기고, 다른 코드와 충돌 없이 고유하게 관리하기 위해

const INTERNAL_KEY = Symbol('internal');

class MyClass {
  constructor() {
    this[INTERNAL_KEY] = 42; // 외부에서 접근 어렵다
  }
}

1. 고유키 생성

  • INTERNAL_KEY는 Symbol('internal')로 만들어졌기 때문에 다른 어떤 코드에서도 같은 키를 생성할 수 없음
  • 만약에 문자열 키 'internal'이었으면 다른 코드에서 실수로 덮어쓸 수 있음

2. 외부에서 직접 접근 어렵게 하려고

const obj = new MyClass();
console.log(obj.INTERNAL_KEY); // undefined
console.log(obj[INTERNAL_KEY]); // 42, 내부에서만 참조 가능

외부에서 'INTERNAL_KEY' 문자열로 접근 안되고, 오직 내부에서 만든 Symbol로만 접근 가능

3. 충돌 방지

라이브러리나 모듈에서 다른 사람이 같은 속성명 써도 절대 겹치지 않음 예를 들면 다른 라이브러리에서 obj.internal = 100을 해도 Symbol속성은 안전하다.



image.png

오호..