적절한 함수명과 단일 책임으로 코드 개선하기
TIL
이 글에서는 자바스크립트로 구현된 보드게임의 로직을 개선하는 과정을 다루며,개선 과정은 함수명 개선 → 중복 제거 → 책임 분리의 단계로 이루어져 있다.작동하지만 개선이 필요한 코드주어진 코드는 기능적으로는 문제없이 동작했지만, 더 나은 방식을 고민하다 보니 여러 개선점을 찾을 수 있었다.function checkLadder(position) { switch (position) { case 4: return 14; case 8: return 30; case 21: return 42; // ... default: return null; }}function checkSnake(position) { switch (position) { case 32: return 10; ..
Node.js와 Express.js를 이용한 서버 구축
TIL
오늘은 Node.js와 Express.js를 활용하여 간단한 서버를 구축하는 방법을 학습했다.Express.js는 Node.js 환경에서 웹 서버를 쉽게 구축할 수 있게 해주는 프레임워크로, 간결한 코드만으로 서버 기능을 구현할 수 있다.Express 서버 기본 설정const express = require("express");const path = require("path");const app = express();const PORT = 3000;app.listen(PORT, () => { console.log("START SERVER");})express와 path 모듈을 불러와 app 인스턴스를 생성하고, 포트 번호를 3000으로 설정하여 서버 리스닝을 시작한다. 정적 파일 제공 설정// 프로젝트..
상태 관리 설계
TIL
오늘은 포켓몬 도감 애플리케이션에 필요한 상태를 설계해보았다.상태 관리는 SPA 개발에서 핵심적인 부분으로, 어떤 데이터를 중앙에서 관리할지 결정하는 과정이다.상태 관리란상태(state)는 애플리케이션의 데이터를 의미하며, 애플리케이션의 동작과 화면 표시 방식을 결정한다. 상태 관리는 데이터의 흐름을 제어하고 컴포넌트 간에 데이터를 공유하는 방법을 설계하는 것이다. 포켓몬 도감 애플리케이션의 상태 설계프로젝트의 구조를 보면, 여러 컴포넌트(Header, PokemonList, PokemonDetail)가 공유해야 하는 데이터가 있다. 이 데이터들은 App 컴포넌트에서 state로 관리하면 보다 효율적으로 관리할 수 있다.import Header from './components/Header.js';imp..
컴포넌트와 모듈 시스템
TIL
오늘은 컴포넌트와 모듈 시스템에 대해 학습하고, 앞으로 만들 웹 페이지를 분석했다.특히 SPA 개발을 위한 컴포넌트 기반 설계에 초점을 맞추어보았다.컴포넌트란?컴포넌트는 독립적이고 재사용 가능한 코드 조각으로, UI의 일부분을 구성한다. 컴포넌트 기반 설계의 장점:재사용성: 한 번 만든 컴포넌트를 여러 곳에서 사용할 수 있다.유지보수성: 각 컴포넌트는 독립적이므로 변경 사항이 다른 부분에 영향을 미치지 않는다.가독성: 코드가 논리적인 단위로 분리되어 가독성이 향상된다. 리액트와 같은 프레임워크는 컴포넌트 기반 개발을 핵심으로 하지만, 바닐라 자바스크립트로도 컴포넌트 패턴을 구현할 수 있다. 모듈 시스템모듈 시스템은 자바스크립트 코드를 여러 파일로 분리하고 필요에 따라 불러오는 방식이다. ES6에서 도입된..
JavaScript의 this와 MPA 구현
TIL
오늘은 자바스크립트의 this 개념을 복습하고, 자바스크립트로 간단한 멀티 페이지 애플리케이션(MPA)을 구현했다.자바스크립트의 this 이해하기자바스크립트에서 this는 호출 방식에 따라 참조하는 대상이 달라진다.// 일반 함수에서의 thisfunction normalFunction() { console.log(this); // window 객체(브라우저 환경)}// 메서드에서의 thisconst obj = { name: '객체', method: function() { console.log(this); // obj 객체 자신을 가리킴 }};// 이벤트 핸들러에서의 thisbutton.addEventListener('click', function() { console.log(this); /..
innterHTML, innerText, textContent의 차이
TIL
자바스크립트에서 DOM 요소의 텍스트 내용을 다루는 세 가지 주요 속성 innerHTML, innterText, textContent의 차이점을 알아보자. 안녕하세요 저는 woodstock입니다. innerHTML이 속성은 요소의 HTML 내용을 그대로 다룬다.HTML 태그를 포함한 모든 내용을 문자열로 반환하고, 새로운 HTML을 설정할 수 있다. 다음 코드는 요소 내부의 HTML 태그를 포함한 모든 내용을 출력한다.const element = document.getElementById('example');console.log(element.innerHTML); 그리고 이렇게 새로운 HTML을 설정하면 태그가 실제로 적용되어 이탤릭체로 표시된다.const element = document.getE..
DOM 조작
TIL
DOM(Document Object Model) API를 활용하여 웹 페이지의 요소를 동적으로 조작하는 방법을 알아보자.버튼 클릭으로 텍스트 변경하기버튼을 클릭하면 텍스트 요소의 내용이 변경되도록 이벤트 리스너를 추가해보자. 기본 텍스트 텍스트 변경 // DOM 요소 선택const button = document.getElementById('changeTextButton');const text = document.getElementById('text');// 텍스트 요소의 내용을 변경하는 함수const onClickButton = () => { text.innerText = "미션 1. DOM API 클리어 🥳";}// 이벤트 리스너 추가bu..
생성자 함수
TIL
생성자 함수는 객체를 생성하기 위한 템플릿으로, 비슷한 구조의 객체를 여러 개 만들 때 유용하다. 다음은 동물의 종류와 소리를 인자로 받아 객체를 생성하는 Animal 생성자 함수를 만든 후, makeSound 메서드를 추가한 코드이다.function Animal(type, sound) { this.type = type; this.sound = sound; this.makeSound = function () { return `${this.type}(은/는) ${this.sound}`; };}생성자 함수 내부에서 this 키워드는 생성될 객체를 가리킨다. 생성자 함수의 이름은 일반적으로 대문자로 시작하여 일반 함수와 구분한다. const dog = new Animal("개", "멍멍");con..
[CS50] 자료구조 - 연결 리스트 개념과 구현
TIL
복잡한 프로그램을 구현하다 보면 기본적인 포인터 구조만 이용해서 메모리를 관리하기에는 다소 번거로울 때가 많다.메모리를 좀 더 효율적으로 관리하고 사용할 수 있는 데이터 구조의 개념과 연결 리스트를 알아보자.데이터 구조란데이터 구조(Data Structure)는 우리가 컴퓨터 메모리를 더 효율적으로 관리하기 위해 새로 정의하는 구조체다.일종의 메모리 레이아웃, 또는 지도라고 생각할 수 있다. 데이터 구조 중 하나인 연결 리스트에 대해 알아보자. 연결 리스트의 개념배열의 한계배열에서는 각 인덱스의 값이 메모리상에서 연이어 저장되어 있다.배열: [1][2][3]주소: 100 104 108 ← 연속된 메모리하지만 꼭 그럴 필요가 있을까? 연결 리스트의 아이디어각 값이 메모리상의 여러 군데 나뉘어져 있다고 ..
[CS50] 배열의 크기 조정하기
TIL
컴퓨터 안의 메모리는 마치 사물함 같은 구조다.우리가 사용하고자 하는 사물함의 개수를 한 번 정한 이후에는, 공간이 모자란다고 해서 주변의 사물함을 마음대로 더 사용할 수는 없다.이미 다른 목적으로 사용되고 있을 수도 있기 때문이다. 이미 일정한 크기의 메모리가 할당되어 있는 상황에서 그 크기를 늘리는 일은 생각만큼 단순하지 않다.포인터와 malloc의 개념을 응용해서 이미 정의된 배열의 크기를 바꿔보자.배열의 크기 조정하기배열 크기를 늘리는 방법일정한 크기의 배열이 주어졌을 때, 그 크기를 키우려면 어떻게 해야 할까? 단순히 현재 배열이 저장되어 있는 메모리 위치의 바로 옆에 덧붙이면 될 것 같지만, 실제로는 다른 데이터가 저장되어 있을 확률이 높다.따라서 새로운 공간에 큰 크기의 메모리를 다시 할당하..