2024/01/30

대상을 객체화 해서 표현하는 경우, 

calculatorCircleArea(); 

calculatorRectArea();

circle.area();

rect.area();

 

이런식으로 일반 함수 vs class를 이용해 인스턴스객체으로 영역을 구하는 방법 예시를 보여주셨다. 

이 개념을 확장하고 다양한 패턴으로 응용해서, 객체로서 어떤 대상을 어떻게 모델링 할 수 있는가에 대한 훈련을 꾸준히 해야할 것이다. 

 

+ JS에서도 TS처럼 class에서 private 처럼 보호할 수 있는 문법이 생겼다고 한다. #을 붙이면, 순수 js에서도 외부로부터 데이터를 보호할 수 있다.

이건 브라우저 호환성에 따라 바벨을 이용해 번역을 해서 사용해야할 수도 있다. 

class Rect {
	#width; 
	#height;
    ...

 

 

2024/01/30

어떻게 생성하고, 접근하고, 조작하냐에 대한 내용

{
	['class name']: 'dody'
}

이런식으로 computed property를 불러올 수 있다.  (?, 내가 글로 적고도 아직 이해 안되는 부분) 

 

- 객체 생성 방법 

(1) 객체 리터럴 

(2) 함수를 이용해 객체를 리턴하는, 마찬가지 이것도 객체 리터럴을 리턴하는 것이다. 

(3) class를 이용해 인스턴스 객체를 리턴하는 것

if(boxshape instanceof Shape){}

Shape라는 class로 만든 인스턴스 인지 확인해보는 연산자

 

- 객체를 변형하는 방법

(추가) box.color = 'blue'; 

(삭제 연산자 사용) delete box.color;

 

- 데이터 복사 방법

const box1 = box;

=> 객체는 참조타입이기 때문에, 원본이 바뀌지 않지 (???, 이거 배웠었는데 기억이 안나네 )

(1) Object.assign({}, box); 

(2) {...box, color: 'blue'};  - 전개연산자 

(3) JSON.parse를 이용해 객체를 문자열로 바꾸고, 다시 객체로 변환하는 작업

2024/01/29

생성기 함수는 제너레이터 함수 라고도 한다. 놀랍게도 초면인 내용.. 아직 갈길이 상당히 멀다는 것.

보통의 함수들과는 메커니즘이 다르다.

 

1. 값을 반환하는데 함수를 종료되지 않기도 한다. 종료되는 시점을 정할 수 있다. 

2. 클로저 공간에 데이터를 가두는 테크닉을 사용하지 않는다.

 

생김새, yield, next를 위주로 알게 되었다. 

기존의 함수를 하나 만들어 예시를 살펴보자. 

function makeInfiniteEnergyGenerator() {
  let energy = 0;
  return function (booster = 0) {
    if (booster) {
      energy += booster;
    } else {
      energy++;
    }
    return energy;
  };
}

const energy = makeInfiniteEnergyGenerator();

for(let i =0; i<5; i++){
    console.log(energy());
}

console.log(energy(5));

 위의 예시를 제너레이터 함수로, 같은 목적을 수행하도록 해보자. 

function * infiniteEnergyGenerator() {
    let energy = 1;
    while(true){
        const booster = yield energy;

        if(booster){
            energy += booster;
        } else {
            energy++;
        }
    }
}

const energyGenerator = infiniteEnergyGenerator();


for(let i =0; i<5; i++){
    console.log(energyGenerator.next());
}
console.log(energyGenerator.next(5))

 

선생님께서 말씀하시길, 아주 무섭게 생긴 함수가 아닐수 없다 하셨다. while(true)에서 벌써 후덜덜 거리는거다. 거기에 return 이없다. 어쩌면 무한으로 코드가 실행되다가 끝나버릴 수도 있는 것이다. 

 

return을 따로 해주지 않는데, console 찍힌 값을 살펴보면, {value: ~, done: ~} 이렇게 생긴 객체를 리턴해주고 있다. 

제너레이터 함수는 본인을 실행시키지 않고, 실행시키는데 필요한 도구를 객체에 담아 넘긴다. 

위의 예시에서 next()라는 함수로 제너레이터 함수를 실행시킨다.

 

그리고 next()함수로 얻게 된 결과 값 중 done은 return여부를 알려준다. 

이 제네레이터 함수는 리액트나 뷰 프레임워크를 사용하게 되면 자주 만날 수 있다고 하는데.. 나는 도대체 언제 만날수 있을까?

2024/01/26

자바스크립트가 작동하는 방식에는 호출스택과 이벤트 루프가 있구나. 

함수에 선언했다는 것은 메모리에 올렸다는 뜻. 

호출스택만으로 모든 자바스크립트를 실행 시킬수는 없다.

이벤트 루프가 호출스택의 나머지를 채워주려나? 비동기를 설명하는 데는 이벤트루프 개념이 필요하다. 

2024/01/26

promise에 대한 세션

동기 코드란, 5번째 라인이 실행되기 전에 6번째 라인이 실행될 수 없는것. 순차적으로 실행하는 상황

비동기 코드란, 앞의 상황이 확정되지 않아도 그 다음 코드를 실행할 수 있는 동시 실행하는 상황

 

그럼 내가 해왓던 js는 동기적언어이다? > 응응

그걸 비동기적으로 사용하려면, setTimeout, promise, async await으로 할 수 있다. 

 

여기서 내 뇌가 심히 꼬이기 시작. 일단 1차 회독은 대충 와이어프레임만 볼것.

06:20 초 쯤부터 promise가 제대로 시작하니 다음에는 그쯤 부터 볼 것. 

 

2024/01/26

비동기 함수는 promise의 메커니즘 위에서 작동하는 코드이기 때문에 충분히 이해하는 것이 중요하다.

 

선생님께서 예시로 한줄한줄 동기적으로 작동하는 코드를 만들어 본다고 하셨다. 

setTimeout을 이용한 delay 함수를 만들어서 then then then 으로 호출했는데, promise만으로선 동기적으로 작동하지 않았다. 

그래서 async와 await를 사용해서 동기적으로 보이게 만들기 성공했다. 어찌됐든 js는 비동기로 작동하기 때문에 이건 동기적으로 보이게 하는 작업에 불과하다.  

 

<나에게 주는 과제 >

- 직접 예시 코드를 실행해보고 본질을 느끼고 올것

그러하다 promise와 thenthenthen으로는 동기적으로 코드를 실행 할 수없다.  그러면 async await를 사용하면? 옳다구나! await를 사용하니 완전 동기적으로 작동하는걸 볼 수 있다. 아주 아름답군. async await가 조금 이쁘게 보일지도? 

 

- promise를 다시 한번 더 살펴보고 올 것

CH06_31 개념과 구조-동기와 비동기

 

 

 

2024/01/26 

일급함수는 함수를 일반적인 값으로 취급하는 개념을 말한다.

값으로 취급한다는건, 인자나 리턴 값으로도 함수를 사용할 수 있다는 뜻이다.

 

함수를 인자로 받는 경우, 함수를 리턴하는 경우 를 break point를 걸어서 헷깔린 코드를 하나하나 짚어주셨다. 

 

이중 리턴을 함수로 하는 경우는 리턴된 값을 변수에 담아서 이름을 지어줄 수 있다. 

이건, 호출하는 부분에서 이것이 여름세일 데이터인지, 겨울세일 데이터인지 알 수 있기 때문에

코드 자체의 표현력이 커진다.  > 이 부분이 이번 강의의 핵심인듯하다. 재밌었다. 

 

+ 일급함수의 이름은 왜

함수 자체를 일급객체로 간주한다는 뜻. 일급 객체는 first class object

일급 객체의 조건은, (1) 변수나 데이터 구조 안에 담을 수 있다. (2) 인자로 전달 할 수 있다. (3) 리턴 값으로 사용할 수 있다.

일급 객체의 조건을 들으니, 함수가 일급객체 취급을 받는 지 알겠고, 그런 함수에게 '호' 로써 일급을 붙였는지 알겠다.

완전 일급함수 찰떡이잖어!? 

+ 일급 함수의 사용법은 무궁무진 하다고 한다.

+ Recent posts