그럴듯한 개발 블로그
article thumbnail
js는 비동기 큐가 2개다?
<language>/javascript 2024. 3. 26. 14:52

vanilla JS로 핑퐁게임 SPA 사이트 프로젝트 하다가 겪은 일이다.커스텀 게임 방 리스트 페이지위 페이지에선 2가지 비동기 동작이 정의되어 있다.1. 먼저 5초마다 setInterval로 현재 페이지네이션 숫자를 담아 fetch후 방 리스트를 렌더링 하는 로직2. 아래 화살표를 누르면 페이지네이션을 + - 하고 그 숫자를 담아 fetch후 방 리스트를 렌더링 하는 로직 그런데 아래 화살표를 광클하니 현재 페이지네이션이 아닌 페이지가 깜빡거리면서 렌더링 되는 이슈가 생겼다.로직상 문제가 없었고, 콘솔로 페이지네이션을 찍어봐도 이상이 없어서 이틀 내내 고민하고 찾아본 결과 비동기 큐가 2개라는 걸 찾았다. setInterval, setTimeout같은 macrotask이 들어가는 macrotask q..

클로저
<language>/javascript 2024. 1. 30. 23:35

c, c++ 만 해 본 나로선 클로저라는 머싯는 이름을 붙이는 게 이해가 안 갔다. 이거 그냥 함수 포인터 리턴하는 거 아니냐??라고 생각했다. 허나 아래 같은 상황에서는 애매하다. function createCounter() { let count = 0; return function() { count += 1; return count; }; } const counter = createCounter(); console.log(counter()); // 1 console.log(counter()); // 2 counter변수에 담긴 createCounter 내부에 선언되어 리턴된 function의 경우 counter 변수가 참조하고 있으므로 인스턴스가 살아있는 게 맞지만, 함수 createCounter의 ..

article thumbnail
간단 echo server 구현 (C++)
<language>/c++ 2023. 10. 16. 18:47

socket관련 시스템콜 함수들을 사용해 보았다.#include #include // server.cpp #include #include #define PORT 8080 int main() { int sock, new_sock; struct sockaddr_in addrStruct; // 소켓 만들기 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == 0) { std::cerr

article thumbnail
c++ class 상속, 가상함수 테이블, 추상클래스
<language>/c++ 2023. 8. 7. 17:12

상속 class 자식클래스 : 접근제한자(public, protected, private) 부모클래스 { 추가 멤버 선언 }; 틀을 가져다 그대로 복사하고 추가하는 느낌으로 이해했다. 자식 클래스에선 부모의 private는 접근할 수 없다. private는 해당 클래스 내에서만 접근이 가능하고, protected는 해당 클래스와 하위 클래스에서 접근이 가능하다. 접근 제한자를 설정하면 그 접근 제한자보다 높은 권한? 은 같은 권한으로 바꾼다. ex) private로 상속하면, 상속받은 부모의 public멤버도 다 private처리됨 private < protected < public public으로 상속하면 그냥 권한 그대로 쓴다는 뜻. virtual ? 자식 클래스에서 함수를 재정의(override)할..

c++ 레퍼런스(참조자)
<language>/c++ 2023. 7. 6. 18:56

// 포인터와 레퍼런스의 차이를 알아보는 코드이다. intmain() { std::stringstr = "HI THIS IS BRAIN"; std::string*stringPTR; std::string&stringREF = str; // 레퍼런스는 선언하면서 초기화 해줘야 한다. stringPTR = &str; // 주소 출력부 std::cout

c++ 동적할당
<language>/c++ 2023. 7. 6. 18:53

//객체의 포인터를 반환하는 함수이다. Zombie* newZombie(std::string name) { Zombie *zom = new Zombie(name); return (zom); } cpp에서 동적할당을 하고 싶을 땐 객체이름 *이름 = new 생성자(arg); 이런식으로 한다. //객체 배열 포인터를 반환하는 함수이다. Zombie* zombieHorde( int N, std::string name ) { Zombie *zom = new Zombie[N]; for (int i = 0; i < N; i++) zom[i].setName(name); return (zom); } 객체 배열을 동적할당 할 땐 생성자 안에 arg를 직접 넣을 수가 없다. 만든 후에 초기화 해 주는 모습이다. intma..