DAY 9
🔖 오늘 읽은 범위 : 에피소드 26 ~ 29
- 정렬 알고리즘이 뭐죠?
- 스택, 큐가 뭐죠?
- 해시 테이블이 뭐죠?
- 개발자 필수 소양, 클린 코드!
😃 기억하고 싶은 내용
-
정렬(sorting) 알고리즘
시간 복잡도는 같으면서 성능은 다른 정렬 알고리즘 3가지- 버블(bubble sort)정렬 : 2개의 창문을 두고 왼쪽과 비교하며 하나씩 오른쪽으로 이동하는 알고리즘
- 선택(selection sort)정렬 : 하나를 콕 집어가며 정렬하는 알고리즘. 한번씩 사이클을 돌면서 기준이 되는 숫자와 가장 작은 숫자의 인덱스를 교환.
- 삽입(insertion sort)정렬 : 앞에 있는 인덱스와 비교해 작으면 앞으로 밀어넣으며 배치하는 알고리즘. 교환이 아니라 밀어 넣는 식
→ 모두 시간복잡도는 O(N²) 기계적으로 측정한 시간복잡도는 같아도 평균적으로 빠른 알고리즘은 있을 수 있다. 정렬에는 어떤 작업이 필요하고, 시간복잡도는 상황에 따라 다를 수도 있다는 컨셉트를 이해해야 한다.
-
스택(stack)과 큐(queue)
추상 자료구조(abstrack data type, ADT): 문법이 아닌 어떤 규칙을 부여하는 것
→ 배열에 큐의 규칙을 부여하면 그 배열은 큐이다.스택 큐 비유 팬케이크 버스 정류장 규칙 1. 위에서 데이터를 쌓는다.
2. 위에서부터 데이터를 뺀다.1. 위로 데이터를 쌓는다.
2. 아래에서부터 데이터를 뺀다.줄임말 LIFO (last in, first out) FIFO (first in, first out)
선입선출예시 웹 브라우저의 뒤로가기 버튼
되돌리기(cmd+Z)버튼쇼핑몰 주문처리 시스템 -
해시 테이블 : 키와 값을 짝지어 모은 것
어떻게 하면 프로그램의 속도를 더 빠르게 만들 수 있을까?-
배열 VS 해시 테이블 비교
menu = [ {name:'커피', price: 10}, {name:'라떼', price: 12}, {name:'차', price: 15}, {name:'케이크', price: 45}, ] // 배열 menu = { 커피 : 10, 라떼 : 12, 차 : 15, 케이크 : 45 } // 해시 테이블 (키:값)
-
배열 검색과 해시 테이블 검색의 시간복잡도
- 배열 선형 검색 시간복잡도 : O(N)
- 해시 테이블 검색 : O(1) 가장 빠른 상수시간! → 어떤 값을 찾더라도 딱 한 단계만 거쳐.
-
해시테이블 속도의 비결
- 해시 함수 : 검색할 때 쓰는 키를 인덱스로 바꿔주는 역할
-
-
클린 코드
설명이 필요없는 코드, 잘 실행되면서 이 코드만 봐도 충분히 설명할 수 있는 상태.-
의미있는 변수, 함수의 이름을 적절히 사용하라.
setInterval(eatKimchi, 86400); // 86400이 무슨 뜻이지? const SECONDS_IN_A_DAY = 86400; setInterval(eatKimchi, 86400); // 아! 하루를 초로 바꾼 값이구나~
-
함수 이름은 가급적 동사로 지어라.
: 함수의 이름은 동사로, 함수는 1가지 액션을 잘 수행해야한다. 함수를 설계하는 시점부터 함수가 해야하는 역할을 명확하게 지정해야 한다.function userData() {...} // 무슨 함수지? 그냥 사용자 데이터? function loadUserData() {...} // 아! 사용자 데이터를 호출하는 함수구나~
-
매개변수는 너무 많이 쓰지 마라. (3개 이하, 또는 configuration object으로)
: 함께 일하는 사람이 숫자만 보는 것으로는 함수의 역할을 파악하기가 힘들다.function makePayment(price, productId, size, quantity, userId) {…} makePayment(35,5,’xl’,2,’니꼬’) // 매개변수가 너무 많아.. function makePayment({price, productId, size, quantity, userId}) {…} makePayment({ price: 35, productId: 5, size: ’xl’, quantity: 2, userId : ’니꼬’ }) // 함수를 파악하기 좋네! (configuration object 방식)
-
불린값을 인자로 보내지 마라.
: 불린값을 함수의 인자로 보낼경우 참,거짓에 따라 2가지 일을 처리해야 한다는 것을 의미한다.
→ 함수는 1가지 일만 잘해야 한다는 규칙에 위배된다. -
축약어를 쓰지 마라.
: 나 혼자만 알아볼 수 있을만한 축약어를 쓰면 안됨 (예: user → u)
-
🤔 오늘의 파트에 대한 소감
- 내용이 정말 알찼고, 특히 친숙하면서도 성능에 따라 분류될 수 있는 정렬 알고리즘을 알게되어서 좋았다. 정렬 기능을 사용하기 위해 구글링해서 사용했던 알고리즘이 버블 알고리즘이라는 것도, 비효율적이라는 것도.
- 스택과 큐라는 추상 자료구조를 배웠는데 팬케이크와 버스정류장이라는 비유로 이해하기 쉬웠다. 나도 쉽게 설명할 수 있는 능력이 있었으면 좋겠다.
- 나은 개발을 위해 개념을 공부하는 데에 게을리하지 말아야겠다.
🔎 추가로 알게 된 것
(책 내용 +알파로 궁금한 것, 이해가 가지 않는 것 등)
- 자바스크립트에서 사용되는 해시 테이블
[자료구조] 해시테이블 with JavaScript
🤟소감 3줄 요약
- 클린코드 읽어보고 싶다.
- 클린코드 읽어보고 싶다.
- 클린코드 읽어보고 싶다.