목록분류 전체보기 (131)
개발자공부일기

Node.js Event Loop흔히 Node.js를 싱글 스레드 논 블로킹이라고 한다. Node.js는 하나의 스레드로 동작하지만 I/O 작업이 발생한 경우 이를 비동기적으로 처리할 수 있다. 분명 하나의 스레드는 하나의 실행 흐름만을 가지고 있고 파일 읽기와 같이 기다려야 하는 작업을 실행하면 그 작업이 끝나기 전에는 아무것도 할 수 없어야만 한다. 그러나 Node.js는 하나의 스레드만으로 여러 비동기 작업들을 블로킹 없이 수행할 수 있고 그 기반에는 이벤트 루프가 존재한다. Nods.js 속 이벤트 루프이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체다. console.log("Hello World")와 같은 동기 작업이 아니라 file.readFile('test.txt', ..
절차 지향 프로그래밍(Procedural Programming)이란?절차지향(Procedural Programming)이란, 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다. 절차지향(Procedural Programming) 특징대표적인 예로는 C언어가 있습니다.컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리 되어 시간적으로 유리합니다.절차지향 프로그래밍은 프로그램의 흐름이 위에서 아래로, 순차적으로 실행되도록 구성됩니다. 이로 인해 프로그램의 진행이 논리적으로 명확해지며, 흐름을 이해하기 쉽습니다. 단, 복잡한 프로그램에서는 흐름이 너무 길어지거나 꼬일 수 있어 가독성이 떨어질..

스택(Stack)스택은 LIFO(Last In First Out) 법칙을 분리하여 데이터 구조로 , 마지막으로 삽입된 요소가 가장 먼저 팝됩니다. 즉, 삽입 및 삭제 작업이 끝에서만 발생한다는 의미입니다.LIFO(후입선출)프링글스통을 상상하면 편하다. 우리가 통에 감자칩을 여러개 넣고 맨아래 감자칩을 빼려면 위에 감자칩부터 먼저 빼야할 것이다.스택 데이터 구조의 표현:스택은 LIFO(마지막에 들어간 요소가 먼저 나감) 원칙을 따르므로 마지막으로 푸시된 요소가 먼저 팝됩니다.스택의 종류:고정 크기 스택 : 이름에서 알 수 있듯이 고정 크기 스택은 고정된 크기를 가지며 동적으로 커지거나 줄어들 수 없습니다. 스택이 가득 차 있고 요소를 추가하려고 하면 오버플로 오류가 발생합니다. 스택이 비어 있고 요소를 제..

배열(Array)이란?배열은 연속된 메모리 위치에 요소를 저장하는 데 사용되는 데이터 구조입니다. 이는 각 요소가 서로 인접한 메모리 위치에 저장된다는 것을 의미합니다. 또한 배열의 크기는 변경할 수 없으며 미리 선언됩니다.이것은 각 상자가 인접한 메모리 위치에 해당하는 크기 6 의 배열의 예입니다 . 보시다시피, 배열은 처음에 크기 6 으로 선언되었지만 인덱스 0-4 만 사용됩니다. 그러나 인덱스 5 가 비어 있고 값이 없지만 메모리 공간을 차지하고 있습니다.접근요소에 접근할 때 배열은 매우 효율적이며 상수 시간 O(1)이 걸립니다 .이는 각 메모리 위치의 순차적 특성 때문입니다. 예를 들어 인덱스 4에서 요소를 검색하고 싶다고 가정해 보겠습니다. 그런 다음 배열의 기본 주소(첫 번째 요소의 메모리 주..

그래프 탐색 알고리즘그래프 탐색 알고리즘은 그래프 구조에서 특정 노드나 경로를 찾기 위해 사용되는 알고리즘입니다. 대표적인 그래프 탐색 알고리즘으로는 깊이 우선 탐색(DFS, Depth-First Search)과 너비 우선 탐색(BFS, Breadth-First Search)이 있습니다. 그래프 탐색 알고리즘은 그래프 구조에서 특정 노드나 경로를 찾기 위해 사용됩니다.DFS와 BFS는 각각의 탐색 방식과 특성이 다르기 때문에, 문제의 특성에 따라 적절한 알고리즘을 선택하여 사용해야 합니다. DFS는 깊이 우선으로 탐색을 진행하며, BFS는 너비 우선으로 탐색을 진행합니다. DFS 깊이 우선 탐색 (Depth-First Search) 깊이 우선 탐색(DFS)은 그래프의 한 노드에서 시작하여 가능한 한 깊..

버블 정렬(Bubble sort)버블 정렬 또는 거품 정렬은 정렬 알고리즘 중 하나이다. 시간 복잡도가 O(n^{2})로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다.# include # define MAX_SIZE 5// 버블 정렬void bubble_sort(int list[], int n){ int i, j, temp; for(i=n-1; i>0; i--){ // 0 ~ (i-1)까지 반복 for(j=0; j선택정렬(Selection sort)선택 정렬은 제자리 정렬 알고리즘의 하나로, 다음과 같은 순서로 이루어진다.주어진 리스트 중에 최소값을 찾는다.그 값을 맨 앞에 위치한 값과 교체한다(..
좋은 코드란게 뭘까 사실 검색해보면 일반적으로 '일관성 있다.', '중복이 적다.', '가독성이 높다.', '테스트에 용이하다.', '확장성이 좋다.' 와 같은 특징들을 가지고 있는 코드가 나온다. 다 맞는 말이긴 한데 뭐랄까 다 경우에 따라 기준이 달라지니까 애매한 말들인거 같다. 그래서 생각해보는데 좋은 코드를 판단하는 주체는 누가 되는건지도 모르겠다.나인가? 회사인가? 동료들인가? 어떤 입장에서 바라보느냐에 따라서 좋은 코드의 기준은 달라지지 않을까 생각한다. 그래서 내 생각에는 일관성이 가장 좋은 코드에 어울린다고 생각한다. 변수의 네이밍부터 추상화의 단계라던가 중복코드의 함수화 같은 코드작성 규칙이 명확하고 내 스타일이 아니더라도일관성있게 짜여서 그 구성에 익숙해지면 가독성이 자연스래 좋아지고..
이번 프로젝트에서 플레이어클래스와 플레이어의 이동 동기화를 담당했습니다. 플레이어 클래스는 우리가 흔히 아는 형태로import { ATK_PER_LV, PLAYER_MAX_HUNGER, PLAYER_SPEED, PLAYER_DEFAULT_RANGE, PLAYER_DEFAULT_ANGLE,} from '../../constants/player.js';class Player { constructor(id, atk, x, y) { this.id = id; this.user = user; // User Class this.maxHp = PLAYER_MAX_HP; this.hp = PLAYER_MAX_HP; this.hunger = PLAYER_MAX_HUNGER; th..