본문 바로가기

전체 글67

[리팩터링 2판] 챕터2 - 리팩터링의 원칙 2.1 리팩터링의 정의 리팩터링: 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 챕터 2의 강조점은 리팩터링의 정의 그 자체였다. 책에서는 이 점을 계속해서 반복한다. 리팩터링은 기능을 추가하거나 버그를 수정하거나 성능을 향상시키기 위한 목적이 아니다. 그저 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법이라는 것이다. 1. 리팩터링 하는 동안에는 코드가 항상 정상 작동해야 한다 -> 구조만 변경하는 것이기 때문에 2. 리팩터링 과정에서 발견된 버그는 리팩터링 후에도 그대로 남아 있어야 한다 -> 구조만 변경하는 것이기 때문에 3. 리팩터링 할 때에는 테스트를 새로 만들지 않는다. 물론 부득이하게 인터페이스를 변경해야할 때에는 테스트를.. 2024. 1. 13.
[프로그래머스] 마법의 엘리베이터 JS 문제링크 풀이 방법 처음에는 한 번 bfs로 해봤는데 수가 커서 그런지 2개 빼고 다 시간초과가 걸리더라구요 그냥 규칙을 찾아서 카운트 해줬습니다 고려해야 하는 점은 수가 5일 때였습니다. 수가 5일 때 다음 자리수가 5 이상이면 +5를 더해서 다음 자리수를 +1 해주고 다음 자리수가 5 미만이면 -5 해줬습니다 5보다 큰 경우에는 무조건 다음 자리 값을 올려줬습니다 만약 마지막 자리수인 경우에는 1을 푸쉬해서 자리수를 올려줬습니다 function solution(storey) { let cnt=0; const storey_arr = String(storey).split('').map(Number).reverse(); for(let i=0;i 2024. 1. 12.
벨로그에서 티스토리로 이사 확실히 티스토리가 에디터도 더 편리하고 다양한 모드를 지원해서 글 쓰기 편한 것 같다 블로그 스킨도 html, css로 직접 조작할 수 있어서 더 입맛에 맞게 사용할 수 있는 것 같다 글을 옮기는 건 조금 귀찮았지만 만족한다 ㅎㅎㅎ 2024. 1. 12.
[프로그래머스] 숫자 변환하기 JS 풀이방법! bfs로 배열값을 갱신하면서 풀었습니다 x에서부터 3가지 방법으로 갈 수 있는 값들을 방문하면서 횟수가 적으면 table을 갱신하고 큐에 넣어주었습니다. 그런데 생각해보니 배열값을 최소값으로 갱신하는게 아니라 true,false로 방문 여부만 갱신해도 상관없는 전형적인 bfs 문제였습니다 그리고 이번 문제는 배열의 shift를 사용하는 경우 시간초과가 발생해서 직접 큐를 구현했습니다 예전에 백준에서 https://www.acmicpc.net/problem/13549 숨바꼭질 3 문제를 풀었는데 이 문제의 경우는 이동할 때 0초가 걸리는 경우가 있어서 최소값을 갱신하면서 풀었습니다 문제의 조건을 잘 생각하면서 풀어야겠네요 최소값 갱신 function solution(x, y, n) { //bfs.. 2024. 1. 11.
[HTTP 완벽 가이드] 웹소켓과 HTTP Keep-Alive 커넥션의 차이 HTTP 완벽 가이드 책을 읽으면서 의문이 들었다 웹소켓과 HTTP keep-alive 커넥션의 차이가 뭐지? 그 차이는 웹소켓은 양방향 통신이고 HTTP는 단방향 통신이라는 것이다 웹소켓의 경우에는 한 번 커넥션이 맺어지면 클라이언트의 요청 없이도 서버 측에서 클라이언트 측으로 통신을 할 수 있다. 하지만 HTTP는 클라이언트가 서버에 요청을 보내야만 응답을 받을 수 있는 단방향 통신이다. 단방향 통신인데 왜 Keep-Alive 커넥션이 존재할까? 일반적인 HTTP는 각 트랜잭션마다 새로운 커넥션을 맺는다. TCP기반 프로토콜인 HTTP는 커넥션을 맺기 위해 핸드쉐이크를 하기 때문에 커넥션 과정에서 지연이 생길 수 있다. 보통 하나의 웹 사이트를 로딩하기 위해서 여러 개의 요청이 이뤄지는데 이미지나 대.. 2024. 1. 11.
React Native 웹소켓 채팅 구현 사이드 프로젝트를 하면서 RN으로 채팅을 구현 중이다 일단 클라이언트에서는 가장 기본인 웹소켓 연결을 구현해봤다 우선 웹소켓 연결을 위한 WebSocketProvider를 만들어서 채팅방을 감싸줬습니다. 웹소켓과 관련된 기능들을 함수로 만들까 하다가 어차피 하나의 웹소켓 인스턴스를 사용할 것이기 때문에 클래스를 작성했습니다. useMemo를 사용해서 토큰이 업데이트 되었을 때 새로운 웹소켓을 생성합니다. WebSocketContext를 사용해서 채팅방에서 웹소켓을 통해 메시지를 주고 받을 수 있습니다. import {tokenState} from '@/store/loginAtom'; import React, {createContext, useMemo} from 'react'; import {useReco.. 2024. 1. 10.