목록분류 전체보기 (52)
Moe's Tech Blog
가장 원시적인 방법중의 하나다 선택 정렬 보다 효율적이나 그래도 알고리즘 문제에 사용하기에는 느리다 적절한 위치에 삽입한다는 의미다 코드 (자바스크립트) function insertionSort(array) { for (let i = 1; i = 0; j--) { if (array[j] < array[j-1]) { [array[j], array[j-1]] = [array[j-1], array[j]]; } } } return array; } 시간 복잡도 삽입 정렬의 시간 복잡도는 O(N2) 이다 최선의 경우 (데이터가 거의 정렬된 상태) O(N)의 시간 복잡도를 가진다 이때는 퀵 정렬보다 강력하다 거의 정렬된 상태로 입력이 주어지는..
가장 원시적인 방법중의 하나다 매번 정렬되지 않은 데이터중 가장 작은 것을 선택해 앞으로 보낸다는 의미다 코드 (자바스크립트) function selectionSort(array) { for (let i = 0; i array[j]) { minIndex = j; } } [array[i], array[minIndex]] = [array[minIndex], array[i]]; } return array; } 시간 복잡도 선택 정렬의 시간 복잡도는 O(N2) 이다 N - 1번 만큼 가장 작은 수를 찾아서 맨 앞으로 보내..
싱글톤은 프로세스가 실행중에 오직 하나의 오브젝트만 생성 되로록 강제하는 패턴이다 프로그램이 shutdown 될때까지 싱글톤을 없애면 안된다 class Singleton { static instance; constructor() { if (!Singleton.instance) { Singleton.instance = this; } return Singleton.instance; } } 싱글톤 패턴을 사용하는 이유 메모리 절약 하나의 클래스 인스턴스로 수행하기 때문에 일반 클래스보다 사용되는 메모리가 적다 클래스간의 데이터 공유가 쉽다 싱글톤 패턴이 유용할때 병렬 프로그래밍 - 실행과 함께 함수의 작업 진행상태를 보고싶을때 싱글톤 패턴의 문제점 테스트 하기 어렵다 격리된 상황에서 수행되려면 매번 인스턴스의..
머리가 아프다. 늘 웹사이트를 만들듯 도면 없이 full-scale 프로그램을 만들었는데 1000라인이 넘어선 지금, 유지보수하거나 새로운 feature를 만들려고 하면은 머릿속이 하얗게 된다. 여기에 문제까지 일어나니 숨쉴 틈이 없다. Node-ftp 라이브러리를 사용해 upload를 하는데 36번째 파일에서 계속 disconnect 된다. disconnect 되면은 다시 접속하는 방법으로 다시 구현했는데 계속 튕긴다. UML 활동 다이어그램을 공부하고 그렸더니 내 코드 로직에는 문제가 없는듯 하다. Filezilla를 활용해서 했는데 모든 파일이 업로드가 된다. 나는 지금 노드의 basic-ftp를 사용해 문제 해결을 하려고 한다. 잘 됬으면.
필자는 회사에서 다음의 웹사이트 처럼 scroll animation 코드를 구현을 하고 싶습니다. 구글의 everydayrobots.com 한꺼번에 하고 싶었으나, 기술적인 한계로 작게 그리고 주먹구구식으로 시작했습니다. 요소가 화면에 보여지면은 class ‘data-animate’를 요소에 삽입해 애니메이션을 하나씩 trigger 했습니다. 다른 코드블록에 에니메이션을 적용하고 싶을땐 코드를 복사 그리고 붙여넣기를 했습니다. // CSS 애니메이션 function runAnimations() { $(".ANIMATION_BLOCK .menu_item").attr('data-animate', 'fade-in-up'); $(".ANIMATION_BLOCK .search_bar").attr('data-ani..
오늘 필자는 자바스크립트로 프로그래머스의 예산 문제를 풀었었습니다. 몇일 전에 파이썬으로 풀었던 코드를 바탕으로 테스트 케이스를 먼저 만들고 알고리즘을 만들며 풀어나갔는데 테스트 케이스 5번, 7~16번이 틀렸습니다. 이상했었습니다. 파이썬 코드에서는 같은 코드가 정답이라고 나와있었기 때문입니다. function solution(d, budget) { let count = 0; let acc = 0; d.sort(); for (const val of d) { if (acc + val > budget) { break; } acc += val; count += 1; } return count; } 의심되는 테스트 케이스를 만들고 반복적으로 풀었습니다. 계속 틀렸었습니다. 마지막으로 MDN의 javascrip..
필자의 디자인 페턴의 공부의 계기는 2018년도로 거슬러 올라갑니다. 첫번째 회사에 취직을 했을땐 필자는 “그냥 돌아가게끔 만들면 되겠지” 하는 생각이 대다수 였습니다. 그때 필자는 회사에서 살아남아야지 생각아래 회사에서 요구하는것들을 배우며 거기에 필요한것들을 배우고 있었습니다. 다른것을 생각할 여유가 없었습니다. 시간이 지나고 자리가 잡혀갔을때 큰 코드베이스를 보며 필자는 “어떻해 하면은 보기좋고 관리하기도 편한 클린한 코드를 만들 수 있을까. 상대방이 왜 이렇게 개발을 했어? 라는 질문에 답변을 줄 수 있을까”는 고민을 갖게되었습니다. 그때 제 선배 겔럼님이 design pattern을 공부하면 그에대한 답변을 얻을 수 있을거라고 조언을 하셨습니다. 필자는 시간이 지나 지금 디자인 페턴 그리고 아키..
들어가며 우리는 주로 코딩 시험을 연습할 때 "제출 후 채점하기" 버튼을 눌러 틀렸는지 맞았는지를 확인합니다. 연습할 때는 괜찮지만 실전은 다릅니다. 회사에서 일을 할 때 선배에게 "선배님 이게 맞습니까?" 하고 계속 물어볼 수 없습니다. 또한 코딩 테스트에서는 "제출 후 채점하기" 버튼을 누르면 서버에 기록이되 많이 누르면 누를수록 안 좋게 보일 수 있습니다. 필자는 Maurício Aniche의 Effective Software Testing에 나와있는 specification based testing을 공부하며 이 문제 점들을 막을 수 있으라고 생각합니다. Specification Based Testing 절차 Step 1: 문제를 읽고 무엇을 목표로 함수를 만드는지, 함수에 들어가는 매개변수, 제..