일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 쉬운 문제
- Crawling
- 레벨 1
- 프로그래머스
- 소켓
- typescript
- 수학
- 가천대
- 크롤링
- 타입 챌린지
- 타입스크립트
- 그래프
- TCP
- 프로그래머스 레벨 2
- HTTP
- 자바스크립트
- BFS
- 문자열
- 백준
- dp
- Algorithm
- javascript
- Node.js
- 알고리즘
- type challenge
- socket
- dfs
- Nestjs
- HTTP 완벽 가이드
- ip
- Today
- Total
목록javascript (104)
kakasoo
Router의 필요성 application은 어쩌면 Router라고 봐도 될지 모르겠습니다. 갑자기 이런 말을 하는 게 의아할 수 있겠습니다만, 사실 앞서 구현한 코드에는 Application 하나만이 존재할 뿐, 다른 Router는 존재하지 않습니다. "그래도 사용하는 데에는 아무런 문제가 없지 않았나요?" 그렇습니다. 아직 path 기능이 완벽하진 않고 ( 지금은 완벽하게 매칭되어야만 하니깐요. ), 그 외에도 추가해야 할 게 산더미처럼 많지만, 어쨌든 원하는대로 동작하는 것을 볼 수 있긴 했습니다. 그렇지만 이렇게 되면 결국 한 덩어리로 만드는 것입니다. 당연히 코드가 길어질수록 힘들어질 것입니다. 앞서 app이라는 함수에 if문으로 분기 처리하는 게 지저분했기 때문에 분리한 거잖아요? 결국 같은 ..
URL에 따라 다르게 동작하기 메서드에 대한 고민은 일단 접어둡시다. 메서드는 오직 GET 하나만 가능한 서버를 만들 겁니다. 일단 편의 상 경로는 아래처럼 세 가지가 있다고 가정하고 해봅시다. / /cats /dogs 세 가지 경로에 대해서 분기를 한다고 하면 이렇게도 가능할 것입니다. const TExpress = () => (req, res) => { console.log("Current URL is : ", req.url); if (req.url === "/") { res.setHeader("Content-Type", "text/plain"); res.end("root."); } else if (req.url === "/cats") { res.setHeader("Content-Type", "tex..
나는 express를 알고 있을까? const http = require("http"); const app = require("./app.js"); const server = http.createServer(app); server.listen(PORT, () => console.log("Server is opened.")); 일반적으로 node.js와 Express.js를 사용해 서버를 만든다면 위의 코드는 공통으로 들어갈 것입니다. 그렇기 때문에 위 코드를 이해하는 데에는 큰 어려움이 없을 것 같습니다. 그런데 공부를 하면서 헷갈리는 부분이 참 많았죠. 하지만 당장 서버를 만드는 데에 필요한 것 같지는 않아 방치하다 이제야 그 고민을 마주합니다. Framework는 뭐지? Server와 Express의..
node.js로 푼 사람이 별로 없다는 게 참 슬픈 일이다. 자바스크립트로도 문제를 풀 수 있는데... 이 문제에서 주의할 것은 다음과 같다. ( 이 문제를 굳이 node.js로 검색했다면야... ) BigInt를 사용할 것. Cpp에서만 문제가 될 줄 알고 자만했는데, BigInt 때문에 틀린 것이었다. mod를 잊지 말 것. 나누라고 문제에 분명히 나와 있다. 혹시나 map 함수나 fill 등의 Array의 프로토타입 함수로 배열을 반환했다면, 모든 인덱스의 배열이 같은 배열을 가리키게 된다. 이 부분은 자바스크립트의 특성이므로 기억해두자. const readline = require("readline"); const rl = readline.createInterface({ input: process..
아는 동생에게 프로그래밍을 가르치며, this에 대해서 설명한 적이 있다. 나는 this를 계속해서, ‘나’라고 설명했다. 너에게 ‘나’는 너일 것이고, 나에게 ‘나’는 나 자신을 가리키는 말인 것처럼, this는 클래스의 인스턴스들이, 각자 자기 자신을 가리키는 말이라고 말했다. 예컨대 자동차에게 ‘나’는 차종이 아니라, 그 자동차 개체 한 개만을 의미한다는 뜻이었다. 객체지향적인 것 this가 있단 것만으로도 언어는 조금 더 객체지향적이라고 할 수 있다. Class를 정의한 후 인스턴스를 만든다면, 우리는 깊은 복사를 할 필요 없이 새 객체를 만들 수 있다. 물론 Function을 이용해 재사용성을 의도적으로 없애는 캡슐화도 있긴 하나, 이런 특수한 경우를 제외하고는 대부분의 클래스 기반 언어는 객체..
C언어를 다룰 때 가장 힘든 것이 동적할당이었다. 동적할당을 처음 배울 당시, 나는 프로그래밍을 마치고 동적할당을 해제하지 않으면, 컴퓨터의 자원을 영영 잃어버리는 것이 아닐지, 그 부분에 대해서 두려움을 가졌다. 당연히 지금은 운영체제가 그런 부분을 자동적으로 처리해준다는 것을 알고 있다. 하지만 그 사실을 몰랐던 나는, 동적할당을 의사가 환자 다루듯 신중하게 해야 했다. 도달 가능성 Mark-and-Sweep 알고리즘이 있다. 이는 말하자면 DFS, BFS와 유사하게, 도달가능한 모든 영역을 탐색하는 알고리즘이다. 나중에 다른 포스팅에서 말하겠지만, JavaScript는 다양한 Enviorment를 Context로 가진다. Mark-and-Sweep 알고리즘은 이 환경 중 맨 처음에 위치할 전역 환경..
형변환 JavaScript에서는 명시적인 형변환, 묵시적인 형변환이 있다. 엄밀히 말해, 묵시적인 형변환은 Wrapper 함수로 인한 형변환이라고 할 수 있겠다. 여기서는 둘의 구분 없이, 자주 보게되는 형태의 형변환들을 짚고 넘어가고자 한다. String String(1) === '1'; // true 1 + "" = '1' // true String으로 감싸서 문자열로 변경할 수도 있으며, 숫자에 문자열을 더해 변경할 수도 있다. Number Number('1') === 1 // true '1' - 0 === 1 // true +'1' === 1 // true '1' / 1 === 1 // true String과 마찬가지로 Number로 감싸서 숫자로 변경하는 것이 가능하고, 뺄셈이나 나눗셈으로도 가..
JavaScript에서의 배열과 리스트 MDN을 참고하면, JavaScript의 Array는 List 형태의 고수준 객체이다. 고수준 객체라는 건, 프로그래머가 내부 코드를 알 필요 없이 사용 가능한, 다양한 메서드들이 미리 구현된 자료구조임을 뜻한다. const arr = new Array(); arr[arr.length] = 3; arr.push(3); 정말 간단하게 push를 구현한다면 위의 코드처럼, 현재 length에 대한 값 대입이다. C언어에서는 생성되지 않은 공간에 값을 할당하면 에러가 발생하지만, JavaScript에서 Array는 길이나 요소의 형태가 결정되어 있지 않아 가능한 방법이다. 여담으로, 이를 이용하면 0번 index 다음에 100번 index에 값을 넣는 것도 가능하다. 물..