[TIL] 20241105 TIL

Jaeyoung Ko·2024년 11월 5일

JS의 자료구조


Map

  • key와 value의 쌍
  • key에 어떠한 자료형도 가능
  • key의 정렬 순서로 저장
  • 검색, 삭제, 확인
const myMap = new Map();
myMap.set('myKey', 'myValue');

myMap.get('myKey'); 		// myValue 를 반환
  • 주요 메서드

keys(), values(), entries()

키, 값, 키-값 쌍의 반복 가능 -> iterator 속성을 통한 for - of 반복문을 활용

  • 그 외 메서드
console.log(myMap.size);					// 길이 반환

console.log(myMap.has("yourKey"));			// key값 기반 검색

Set

  • 고유한 값을 저장하는 자료구조
  • 키 저장없이 값만 저장
  • 값이 중복되지 않는 유일한 요소로 구성
  • 집합 연산의 구현

const mySet = new Set();

mySet.add("value1");

console.log(mySet.size);

console.log(mySet.has("yourValue"));



JS의 자료형 구분 : 기본형과 참조형

(1) 복제방식 : 값이 담긴 주소값의 복제 / 값이 담긴 주소값들의 묶음을 가리키는 주소값 복제

(2) 불변성 여부 : 불변성 / 가변




(!) JS의 메모리 관리

숫자 8 byte고정. 영문 1 byte, 한글 2byte

let x = 10;			// 8byte 

js에서 메모리와 관련하여,

변수와 데이터 영역이 분리되어 있다.

ex.

let x = 10;			// 8byte 

에 대해서,

"데이터 영역" : 5008번 주소값에 데이터값 "10"이 저장됨.

"변수 영역" : 1004번 주소값에 변수 x와 데이터값 10이 담긴 데이터영역 주소값 5008이 저장됨.

이 때,

x = 7;			// 8byte 

x에 대한 값의 변경이 일어나면,

"데이터 영역"에 새로운 빈 공간 5009번 주소값에 데이터값 7을 저장하고,

변수 영역의 변수 x가 저장되어 있던 1004번 주소값은 데이터값 10이 아니라 데이터값 7을 저장한 데이터 주소 공간 5009번을 가리킨다.

이 경우 데이터값 10이 저장된 5008번 주소에 대해서,

가비지 컬렉터 GC의 reference check을 통해 메모리를 회수한다.





실행 컨텍스트

실행할 코드에 제공할 환경 정보들을 모은 객체

call stack

동일 환경에 있는 코드를 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고 이것을 call stack에 적재.

(1) Variable Environment

  • record 식별자 정보를 갖고 있다.

  • outer 외부 환경 정보를 갖고 있다.

  • snapshot 유지 (실시간 변경 x)

(2) Lexcial Environment

  • ve와 동일하게 record와 outer를 가진다.

  • 변경사항에 대해 실시간 반영을 한다.

즉, 실행 컨텍스트 생성 시, VE에 정보를 담은 후 이를 복사하여 LE를 생성하여 LE를 주로 활용

(3) This Binding



Hoisting 호이스팅

식별 정보를 맨 위로 끌어올리는 변수 정보 수집 과정

LE

Scope

식별자의 유효 범위

-> 스코프 체인 : 식별자의 유효범위를 안에서부터 바깥으로 검색 (inner -> outer -> global)





프로젝트 진행

추가구현


11/05 업데이트 내역

  • 선택지 : [방어] : 방어 액션 이후 한 턴동안 추가 방어도를 얻는다. 방어 액션을 취하는 동안은 일정 확률(3%)로 [완벽한 방어]가 발동되며, 완벽한 방어 시 피해를 입지 않는다.

방어도 시스템

방어도는 피격 시 데미지 경감을 도와준다.
데미지 계산 : max(데미지 총량 - 방어도, 0)
ex. 기본 방어도 5 몬스터 데미지 20 => 20 - 5 = 15의 피해
기본 방어도 5 방어 액션을 통해 얻은 추가방어도 15 몬스터 데미지 16 => max((15 - (5+15)) , 0) = 0 피해 입지 않음
기본 방어도 5 몬스터 데미지 24, 완벽한 방어 발동 => 0 피해를 입지 않음

  • 선택지 : [반격] : 반격 액션 이후 상대의 공격 시, 절반의 데미지 경감 + 1.5배의 플레이어 공격 / 상대의 액션이 공격이 아닐 시, 아무런 영향 없음

로그인 + 리더보드 시스템

  • 로그라이크 플레이에 전체 클리어 혹은 사망한 스테이지를 firebase db에 기록
  • 초기화면에서 조회 가능
profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글