본문 바로가기

전체 글193

[React]간편한 상태관리 훅 useLocation useLocation 란 ?  현재 경로로 이동할 때 상태(state)를 전달할 수있음. 전역적으로 관리해야할 상태가 아니라면 간단하고 쉽게 구현할 수 다는 장점이 있음단점은 브라우저에 해당 상태가 저장되기때문에 새로고침하면 다 상태 날아감 사용하려면 react-router-dom이 설치되어 있어야한다.없다면 이렇게 설치하기npm install react-router-dom 사용 목적 : 이미지 목록에서 한 이미지를 선택하면해당 이미지의 디테일 페이지로 이동! 이때 클린한 이미지의 데이터를 함께 전송하고 싶었다. 그동안 사용했던 방식은 1. useContext, Redux를 통해서 데이터를 보관했다가 사용2. 쿼리에 id를 담아서 이동 후, 해당 페이지에서 id값을 받아서 다시 API와 통신하여 데이터 .. 2024. 10. 4.
Git terminal 명령어 모음 작업 플로우↓# 1. 메인 브랜치로 이동git checkout main # 2. 원격 저장소의 최신 메인 브랜치 상태를 로컬로 가져오기git pull origin main # 3. 작업할 새로운 브랜치 생성 (기존 `main` 브랜치에서 분기됨)git checkout -b feature/name # 4. 작업 내용을 스테이징 영역에 추가git add . # 5. 커밋 메시지와 함께 변경 사항 커밋git commit -m "The message"# 6. 원격 저장소의 main 브랜치의 최신 상태를 다시 한 번 확인하여 가져오기 (병합하기 전에 최신 상태 유지)git pull origin main # 이 명령어로 원격 main의 변경 사항을 로컬로 가져옴. (fetch + merge 자동 실행)# 7. 로컬.. 2024. 8. 29.
[백준 2747번 node.js] 피보나치 수 https://www.acmicpc.net/problem/2747 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하기동적 프로그래밍 (Dynamic Programming - DP)큰 문제의 해답에 그보다 작은 문제의 해답이 포함되어 있을 때 프로그램의 속도를 비약적으로 향상 시킴쉽게 말해서, 메모리를 사용해서 중 복 연산을 줄이고 중복 연산을 줄여서 수행 속도를 개선한다  가장 처음에 푼것은 DP의 가장 중요한 포인트는 죄다 던져두고 지멋대로 풀었다. let num = 10;//테스트 인풋function fibonacci(n) { if(n  하지만 이 문제에서 가장 중요한 것은 반복되는연산을 다시 수행하지 않는것!!!!!!!! 우선 재귀함수를 적용했을 때 ( 직관적이지만 여전히 같은 연.. 2024. 8. 21.
[백준 7568번 node.js] 덩치 https://www.acmicpc.net/problem/7568  학생 N명의 몸무게와 키가 담긴 입력을 읽어서 각 사람의 덩치 등수를 계산하여 출력여담 코딩테스트를 꽤나 간만에 풀었더니... 매일 풀 때와 달리 시작 전부터 버벅 거렸다.  이럴때는어떻게 처리해야할지 먼저 단계적으로 적어보고 주어진 것, 요구하는 것, 필요한 로직 이렇게 나누어서 적어보면어떻게 접근해야하는지 시동이 걸리는 느낌이다.다시 코테와 친근해지기전까지는 계속 이럴 듯..  해결방법  1. 주어진 문자열에서 필요한 값 추출const inputLines = input.trim().split("\n");const peopleCount = Number(inputLines[0]); // 사람 수const people = inputLine.. 2024. 8. 12.
[JavaScript]prototype과 __proto__의 차이 .prototype이 뭐냐: prototype은 함수 객체(특히 생성자 함수)에만 존재하는 속성.생성자 함수로 객체를 생성할 때, 이 prototype 속성이 그 객체의 프로토타입이 됨.   .prototype을 왜 쓰냐: prototype은 모든 인스턴스가 공유할 메서드나 속성을 정의하는 데 사용됨.예를 들어, 생성자 함수로 객체를 여러 개 생성했을 때, 이 객체들은 모두 동일한 prototype 객체를 참조함.이를 통해 메서드나 속성을 모든 인스턴스에 공유할 수 있음. .prototype 예시:function Dog(name) { this.name = name;}Dog.prototype.bark = function() { console.log("Woof!");};//생성자 함수에 있는 프로.. 2024. 8. 8.
[TypeScript]Type Assertion , Type Casting Type Assertion 이 뭐냐 : 타입스크립트에서만 사용하는 개념으로  타입을 확인하거나 강요할 때 사용, 사용을 피하는 것이 좋음. 쉽게 말해서 컴파일러에게 "이 변수는 이 타입이야"라고 알려주는 방법Type Assertion  왜 하냐 : TypeScript 가 알 수 없는 타입을 사용할 경우, 타입을 선언하지않으면 에러가 난다.이런 상황에서 Type Assertion (타입 단언)을 해준다.에러 상황 예시const myCanvas = document.getElementById("main_canvas"); Type Assertion  어떻게 하냐 :  as 문법꺾쇠 괄호() 문법Type Assertion 예시 :let someValue: any = "this is a string";let str.. 2024. 8. 4.
반쪽짜리 주니어의 2024년 상반기 회고 1. 초기목표 :   2024년도 초기목표의 키워드는 "협업" 이었다.   막 취업을 한 그때의 난... 2024년도에는 치열하게 사는 주니어 개발자로 성장해야지!라는 마음으로 가득했다.가장 좋았던 점은 내가 정말 재미있어서 한 취미와 회사의 서비스가 같아서 더 특별하게 느껴진 소중한 첫 회사였다. 기술적인 부분은 당연지사. 깃을 이용한 협업 환경에 직접 투입된다는 것이 가장 설렜다.2. 실제 일어난 일 :Git, Jira를 둘 다 이용해 볼 수 있었다.  깃은 회사에서 기존에 이용하던 것이라서 컨벤션을 따르며 순조롭게 습득했다.  하지만 지라는 막 도입을 한 단계여서첫번째 시도는 개발팀만 사용,두번째 시도는 모든팀이 함께 사용 이렇게 다르게 시도를 해보았다. 모든 팀이 함께 사용했던 것은 잦은 수정사항.. 2024. 8. 1.
[TypeScript]Interface VS Type 간단 비교 📢📢인터페이스와 타입의 차이점!!! 우선 한 개 씩 알아보자첫 타자, 인터페이스 인터페이스란객치 구조를 정의하는 역할을 한다. 다시 말해서 특정 객체가 가져야하는 속성과 메서드의 집합을 인터페이스로 정의하여 객체가 그 구조를 따르게 함! 쉽게 말해서 객체와 객체들 간의 의사소통을 위해 규격을 정해놓는 것 like a 계약서.  interface StudentInterface { age: number; name: string; } 인터페이스명은 대문자로 짓는다.다음 타자, 타입타입이란간단히 말해서 어떤 데이터를 담을때, 어떤 모습의 데이터를 담을지 정하는것. type StudentType { age: number; name: string; } 위의 타입은 number자료형만.. 2024. 7. 30.
[백준 11047번 node.js] 동전 0 https://www.acmicpc.net/problem/11047  필요한 동전 개수의 최솟값을 구하는 프로그램 작성하기 해결방법  1. 주어진 문자열에서 필요한 값 추출let targetAmount = givenData.split('\n')[0].split(' ').map(Number)[1];let array = givenData.split('\n').map(Number).slice(1).reverse(); 2. 거꾸로 정렬되어있는 배열에서 목표금액과 배열에있는 동전들의 아이템들을 비교한다.array.reduce((acc,curr)=>{}); 3. 목표금액보다 작은 동전 아이템이 나오면!! 나누기를 실시하고 정수만 추출 acc.count = acc.count + Math.floor(acc.rem.. 2024. 6. 9.
[백준 2884번 node.js] 알람 시계 https://www.acmicpc.net/problem/2884  원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 프로그램을 작성  해결과정 1. 주어진 문자열 분리 const covertedInput = input.split(' '); 2. Date생성자 적용const convertedInput = new Date(2021, 0, 1, covertedInput[0], covertedInput[1]); 3. timestamp 생성 후 계산 const offset = 45 * 60 * 1000; const caculatedTimeStamp = givenDate - offset;4. Date 형태로 포맷 const newDate = new Date(caculatedTimeStam.. 2024. 6. 9.
[백준 2908번 node.js] 상수 https://www.acmicpc.net/problem/2908  두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성  해결과정  1. 주어진 문자열을 숫자타입의 배열로 바꾼다.  배열로 바꿀때 선택자는 띄어쓰기 사용input.split(' ')2. 바꾼 배열의 숫자들을 거꾸로 정렬input.reduce((accumulator,currentValue)=>{},0) //숫자타입으로 변환하니까 0으로 설정 3. 정렬한 두 개의 숫자를 비교하고더 큰 숫자를 숫자타입으로 반환const reversedValue = Number(Array.from(currentValue).reverse().join(''));return reversedValue > accumulator ? reversedValue .. 2024. 6. 9.
[백준 : 11720번 node.js] 숫자의 합 https://www.acmicpc.net/submit/11720/79358793  N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성   해결 방법 1. 주어진 숫자를 프로그램에 사용할수있도록 쪼개기 let test = input.split('\n')[1]; 2. 주어진 숫자는  문자열이니 배열에 담자3. 합산식을 해야하니 문자열을 숫자로 변환하자let array = Array.from(String(test), Number); 4. 더하자let result = (array.reduce((accumulator, currentValue) => accumulator + currentValue, 0)); 5. 제출const fs = require('fs');const fileP.. 2024. 6. 8.
[백준 : 10988번 node.js] 팰린드롬인지 확인하기 https://www.acmicpc.net/problem/10988  첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다. 팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.   해결과정 1. 주어지는 단어를 배열로 담는다 2.각 알파벳을 쪼개서 담고 , 다시 합친다 3. 주어지는 문자와 비교하여 같으면 1 리턴, 다르면 0리턴 4. 제출const fs = require('fs');const filePath = process.platform === "linux" ? '/dev/stdin' : __dirname + '/input.txt';const input = fs.readFileSync(filePath).toString().trim();function reverseString(give.. 2024. 6. 8.
[백준 : 2753번 node.js] 윤년 https://www.acmicpc.net/problem/2753 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성  해결 과정 1. 주어진 조건 나열_year % 4 === 0 && _year % 100 !== 0) || _year % 400 2. 출력되어야 할 값 추가 _year % 4 === 0 && _year % 100 !== 0) || _year % 400 === 0 ? 1 : 0; 3. 함수로 작성function leapYearGenerator(_year){ return (_year % 4 === 0 && _year % 100 !== 0) || _year % 400 === 0 ? 1 : 0;} 4. 테스트 코드 작성const assert = require('asse.. 2024. 6. 6.
[백준 : 10172번 node.js] 개 https://www.acmicpc.net/problem/10172 콘솔로그로 귀여운 강아지를 출력하는문제고민 과정 1. 자바스크립트에 쓰이는 명령어가 있는가2. 있다면 어떻게 예외처리를 할 수 있는가?  아래처럼 냅다 콘솔로그로 찍으면 에러가 난다 ..console.log(`|\_/||q p| /}( 0 )"""\|"^"` |||_/=\\__|`);  해결 과정  1. 역슬래시 ( Backslash )  는 \\를 사용해야 한개로 출력가능,  왜냐... \로 시작하는 명령어가 있기때문에 \ 다음으로 오는 문자를 명령어로 인식함  따라서  \\ (Forward Slash)  로 입력해줌으로써 escape 2. 백틱을 사용하면 줄바꿈명령어를 굳이 안 쳐도 되지만 ... 자동 줄바꿈 기능이있는 Fo.. 2024. 6. 6.
[JavaScript]바닐라자바스크립트 컴포넌트생성하기 // 페이지(컴포넌트) 임포트 import Home from "./public/pages/Home.js"; import Design from "./public/pages/Design.js"; import Board from "./public/pages/Board.js"; import Submit from "./public/pages/Submit.js"; // 경로 문자열을 정규 표현식으로 변환하는 함수 const pathToRegex = path => new RegExp("^" + path.replace(/\//g, "\\/").replace(/:\w+/g, "(.+)") + "$"); // 매개변수와 일치하는 값을 추출하는 함수 const getParams = match => { const values.. 2023. 12. 5.
[JavaScript]Vanilla Javascript로 웹 컴포넌트 만들기 --스크랩 https://junilhwang.github.io/TIL/Javascript/Design/Vanilla-JS-Component/#_1-%E1%84%80%E1%85%B5%E1%84%82%E1%85%B3%E1%86%BC-%E1%84%80%E1%85%AE%E1%84%92%E1%85%A7%E1%86%AB Vanilla Javascript로 웹 컴포넌트 만들기 | 개발자 황준일 Vanilla Javascript로 웹 컴포넌트 만들기 9월에 넥스트 스텝open in new window에서 진행하는 블랙커피 스터디open in new window에 참여했다. 이 포스트는 스터디 기간동안 계속 고민하며 만들었던 컴포넌트 junilhwang.github.io 2023. 12. 4.
[React.js]명령어로 리액트 프로젝트 생성하기 리액트 프로젝트 설치 전에 다운로드해야할 프로그램들 Node.js npm ( Node Package Manager) Node.js https://nodejs.org/ko/download/ npm $ node -v npm 으로 진행할 경우 아래의 명령어를 실행 npx create-react-app hello-react OR yarn https://classic.yarnpkg.com/en/docs/install#windows-stable Yarn Fast, reliable, and secure dependency management. classic.yarnpkg.com yarn으로 진행할 경우 아래의 명령어를 실행 yarn create react-app hello-react 프로젝트가 있는 경로로 이동하기 .. 2023. 12. 3.
[JavaScript]비동기 작업 수행하는 코드 뜯기 아래 코드는 unbookClub 프로젝트를 진행하면서 API 도서검색 기능구현을 하며 사용한 코드다. onClick 함수로 아래의 아래의 코드와 연결시켰다. 기능 목록 event.preventDeafault(); => 새로고침 방지 setSearchError(null); => 검색 오류를 나타내는 상태 변수를 초기화.(useState 리액트 내장함수 사용) startLoading(); => customHook(contextAPI와 함께 사용함) 으로써 로딩 이미지를 보여주는 커스텀훅 호출 async { ... } await(error) { ... } => async 키워드는 함수를 비동기 함수로 선언. 이는 함수 내에서 await 키워드를 사용할 수 있게 하고, 함수가 항상 Promise를 반환. asy.. 2023. 11. 21.
[firebase Hosting]프로젝트 배포 후 업데이트하기 feat.짱 쉬움 프로젝트 내용 수정 후 업데이트 하려면 아래와 같은 명령어를 입력해야함. 업데이트가 잘 되었다 야호 2023. 11. 9.
[React.js]아코디언 메뉴 만들기 가이드라인이 적인 페이지를 만드는데 너무 밋밋해서 아코디언 기능을 넣기로 했다! 아래 사진의 질문, 답변은 임시텍스트를 아무거나 붙여놓음.. 위의 네모박스로 체크해둔 부분을 아코디언으로 구현하기로 했고 위의 HTML, CSS는 아래와 같다. 여기서 useCallback을 사용하면 함수가 렌더링마다 재생성되지 않으며, 의존성 배열을 사용해서 해당 배열의 값이 변경될 때만 handBtnClick함수가 다시 생성된다. 또한 직접함수를 선언하면 메모리에 여러 함수 인스턴스가 생성될 수 있지만,useCallback을사용하면 함수 인스턴스가 최소화 되어 메모리 사용량을 줄일 수 있다. 왜냐하면 useCallback을사용하면 함수 인스턴스를 재사용하기때문! 근데!! 위에처럼 엄청 간단한 코드는 많은 메모리를 사용하지.. 2023. 11. 6.
[TypeScript]JS react -> TS react 리팩토링 자바스크립트로 작성된 프로젝트를 타입스크립트로 변환하는 과정. 기존 작업한 리액트 프로젝트 : React, webpack, babel로 구성되어있음. 마이그레이션 진행 전 폴더를 따로 백업해두고 새로 레파지토리와, 폴더를 만들어서 진행함. 참고한 블로그! https://projooni.tistory.com/entry/%EA%B8%B0%EC%A1%B4-Git-Repository%EB%A5%BC-%EB%B3%B5%EC%82%AC%ED%95%98%EC%97%AC-%EC%83%88%EB%A1%9C%EC%9A%B4-Repository-%EB%A7%8C%EB%93%A4%EA%B8%B0 기존 Git Repository를 복사하여 새로운 Repository 만들기 보통 Git Repository를 복사할 때 fork를.. 2023. 10. 25.
[TypeScript]JS -> TS 리팩토링하며 겪은 오류 오류 메세지 : Cannot use JSX unless the '--jsx' flag is provided.ts(17004) const Container: IStyledComponent 오류 원인 : TypeScript가 JSX 확장자 파일 인식을 못해서. 해결 방법 : jsx 속성을 추가한다. 오류 메세지: Argument of type 'ProductItem | undefined' is not assignable to parameter of type 'ProductItem'. Type 'undefined' is not assignable to type 'ProductItem' 오류 원인 : 정의되지 않은 값이 들어올수 있다고 TS에게 정의를 하지 않아서, 알 수 없는 타입을 전달하는 과정에서 생김 해.. 2023. 10. 24.
[React.js]구조설계 --스크랩 https://velog.io/@_seeul/React-%EB%A6%AC%EC%95%A1%ED%8A%B8%EB%A1%9C-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-%EC%A7%84%ED%96%89%ED%95%A0%EB%95%8C-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EC%9E%A1%EB%8A%94%EA%B2%83%EC%9D%B4-%EC%A2%8B%EC%9D%84%EA%B9%8C React | 리액트로 프로젝트를 진행할때 어떻게 폴더와 컴포넌트 구조를 설계하는 것이 좋을까?🤔 리액트 초기세팅 후 컴포넌트 구조 설계하기 🧸 velog.io 매번 프로젝트 생성할 때 마다 .. 2023. 9. 25.
[Git]원격저장소 -> 로컬저장소 clone || pull 오류 해결 --스크랩 clone 시 fatal: destination path '프로젝트명' already exists and is not an empty directory. 라고 뜨면 https://nagneo.tistory.com/18 [Git] 비어있지 않은 로컬 저장소로 Clone하기 보통 새로운 프로젝트를 만들 때, Github에 repository를 만들고 해장 저장소를 Clone 해서 사용한다. 오늘은 반대로 로컬 저장소에 폴더 및 파일을 만들고 이를 원격 저장소와 연결하는 절차를 정리하 nagneo.tistory.com 위의 블로그 참고, 혹은 로컬 폴더내에서 로컬 저장소를 pull하려고 할 때 Remote origin already exists 오류가 뜬다면 https://coding-factory.tisto.. 2023. 9. 20.
[React]App.css VS index.css 결론부터.. 현재 코드를 작성하는 폴더의 이름과 같은 css 파일이 가장 바람직함. 개인적인 의견으로는 연습용 코드작성이라면 index.js보다는 App.js로 하는게 낫다. App.js는 프로젝트 진행시 서버 설정 / 미들웨어 정의 / 라우트 정의/인증 등 여러가지를 설정하고, (App의 상위 파일인) index.js는 index.html과 연결하여 화면에 렌더링을 하는 역할을 하기 때문에 대부분의 작업은 컴포넌트 -> App.js로 연결 -> index.js가 App.js를 import -> index.html와 연결되어 화면에 렌더링 하기때문에 실제로 index.js에 직접 화면 구현을 위한 코드를 짤 일이 많지 않기 때문.. 관련 블로그글 : https://pink1016.tistory.com/8.. 2023. 9. 15.
[JavaScript ES6]map 함수, 백틱 || 문자열리터럴 map함수는 배열을 변형할 수 도 있지만 새로 만들 수도 있다. https://hans-j.tistory.com/144 [JavaScript]배열 정렬하기 feat. sort, map, filter /리액트 응용 배! 열! 이! 란! 이름과 인덱스로 참조되는 정렬된 값의 집합 자세한 설명은 넘어가고 바로 예시로 고고. 문자 정렬 (A-Z,가-하 오름차순) **sort함수는 원본을 변형시키니 주의!- //어레이는 변수명 hans-j.tistory.com 여기에 간단하게 써둠ㅋ https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map Array.prototype.map() - JavaScript | MDN m.. 2023. 9. 14.
[JavaScript && HTML]script 요소 배치 script 요소를 어디에 배치하냐에 따라서 오류가 나거나 undefined이 출력되는 것을 보고 ... '그동안 안에 script 요소를 배치했을 때 오류가 안 난 이유는 뭐지?' 하고 궁금해졌다... 이런거 미리 알고 있었어야했는데 이제서야 찾아보는게 부끄럽다;; 이번에 클론코딩을 진행하면서 큰 플랫폼들의 코드를 뜯어보는데 script가 에 있기도 하고 에 있기도 해서 궁금했다. 문서의 DOM구조가 필요한 경우에는에 위치시키고 앞에 위치 시키는 경우는 대부분의 스크립트 위치로 추천되는 위치이며 이벤트리스너처럼 동적으로 (브라우저 렌더링이 끝난 후) 컨텐츠를 변경할 때. 위의 글 출처 : https://ko.wikibooks.org/wiki/JavaScript/%EC%BD%94%EB%93%9C_%EB%.. 2023. 9. 14.
[JavaScript]화살표 함수 || Arrow function 하이 ㅎㅇ ㅎ . 이런 느낌의 화살표 함수 매개변수 (Parameter) 한 개 인 경우에는 괄호를 없앨 수 있기 때문에 위의 이미지에서 가장 아래에 있는 hey2함수처럼 구현할 수 도 있다. 화살표 함수는 this 키워드를 사용 할 수 없으니 주의해야 함. https://hans-j.tistory.com/101 [JavaScript/자바스크립트]this 키워드 this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수 self-referencing variable다. 암묵적으로 생성되며 코드 어디서든 참조 할 수 있다. 함수를 호출하면 arguments 객체와 th hans-j.tistory.com 2023. 9. 14.
[JavaScript] Uncaught TypeError: Cannot set properties of null (setting 'innerHTML')에러 자바스크립트 언어는 위에서부터 아래로 순차적으로 작동함. 위의 코드를 보면 p태그는 맨 아래에 있기때문에 script가 실행되고 있을 때 없는 태그에 html을 붙이라고 명령하고 있는 것과 같다. 따라서 이 에러는 순서만 바꿔주면 쉽게 해결됨 ㅋ ↓↓↓위의 오류 해결하면서 찾아보고 작성한 글 ↓↓↓ https://hans-j.tistory.com/234 [JavaScript && HTML]script 요소 배치 script 요소를 어디에 배치하냐에 따라서 오류가 나거나 undefined이 출력되는 것을 보고 ... '그동안 안에 script 요소를 배치했을 때 오류가 안 난 이유는 뭐지?' 하고 궁금해졌다... 이런거 미리 알고 hans-j.tistory.com 위와 같은 오류가 발생했을 경우 오류 해결.. 2023. 9. 14.