2023-01-21 TIL 에피소드 26~29
- 세줄 요약
데이터를 순서 있게 정리하는 정렬 알고리즘, 팬케이크와 같은 스택과 버스정류장에서 줄 서는 것과 같은 큐, 키와 값을 짝지어 속도를 빠르게 해주는 해시 테이블, 부연설명이 필요 없이 코드를 읽기만 해도 스르륵 이해되는 클린코드 작성 꿀팁 등을 알 수 있다.
- 책에서 기억하고 싶은 내용
데이터를 순서 있게 정리하는 정렬 알고리즘(26. 정렬 알고리즘이 뭐죠?)
1. 버블 정렬
- 두개의 값을 비교하고 오른쪽으로 1칸씩 밀면서 정렬
- 시간 복잡도는 O(N²)이므로 좋은 알고리즘은 아님
2. 선택 정렬
- 가장 작은 데이터 또는 가장 큰 데이터의 '위치'를 따로 기억하여 데이터를 교환하는 방식
- 시간 복잡도는 O(N²)이지만, 자리를 바꾸는 연산은 사이클당 1번씩만 하므로 버블 정렬보다는 훨씬 효율적
3. 삽입 정렬
- 앞에 있는 데이터를 보면서 배치, 0번째가 아닌 1번째 데이터부터 비교 시작
- 데이터를 교환이 아닌 앞으로 밀어 넣기
- 버블과 선택 정렬보다 빠름
스택과 큐는 문법이 아닌 규칙 개념의 자료구조이다(27. 스택, 큐가 뭐죠?)
- 스택과 큐는 배열처럼 실제로 존재하는 개념이 아님, 개발자의 상상 속의 데이터를 저장하는 개념
팬케이크와 같은 스택 - LIFO(Last in, First out)
- 마지막에 들어간 녀석이 처음으로 나온다
- 맨 위(마지막)에서 값을 추가하거나 삭제, 데이터를 중간에서 뺄 수 없음
- 위에서 데이터를 쌓는다
- 위에서부터 데이터를 뺀다
- ex. 맨 마지막에 방문한 페이지를 빼는 웹 브라우저의 뒤로 가기 버튼
- ex. 마지막 실행 기록을 빼서 없애는 되돌리기 단축키
버스정류장에서 줄 서는 것과 같은 큐 - FIFO(First in, First out)
- 버스를 가장 오랫동안 기다린 사람이 가장 먼저 타는 것과 같음
- 먼저 들어온 데이터가 먼저 빠짐
- 위로 데이터를 쌓는다
- 아래에서부터 데이터를 뺀다
- ex. 주문이 들어온 순서대로 데이터를 쌓고, 가장 먼저 온 주문부터 처리하는 쇼핑몰 주문 처리 시스템
키와 값을 짝지어 놓은 해시 테이블(28. 해시 테이블이 뭐죠?)
- 해시 테이블은 프로그램 속도 즉, 검색 속도를 빠르게 하기 위함
- 배열 검색(선형 검색)의 시간 복잡도는 O(N)이지만, 해시 테이블은 O(1)로 한 단계만 거치는 빠른 속도이다
- 해시테이블 속도의 비결은 해시함수이다
- 해시함수는 검색할 때 쓰는 키를 인덱스 숫자로 반환해주는 역할
- 두 개 이상의 데이터를 해시함수가 같은 인덱스로 반환하면 해시충돌이 일어남
- 해시충돌 대처방법으로, 같은 인덱스에 또 다른 배열을 넣는 것이 있다
설명이 필요 없는 코드, 클린코드를 위한 5가지 꿀팁(29. 개발자 필수 소양, 클린 코드!)
1. 의미 있는 변수, 함수 이름을 적절히 사용하라
const SECONDS_IN_A_DAY = 86400; setInverval(eatKimchi, SECONDS_IN_A_DAY);
2. 함수 이름은 가급적 동사로 지어라
- 이 함수로 무엇을 할 것인지 보여줌
- 내가 만든 함수가 과도하게 많은 기능을 수행하고 있는지 알 수 있음
- 함수의 역할을 1개로 제한
3. 매개변수는 3개 이하로 사용하자
- 매개변수가 너무 많으면 함수의 역할을 파악하기 어려움
- 불가피하게 매개변수를 많이 설정해야 한다면 컨피겨레이션 오브젝트라는 방식으로 매개변수를 묶어 전달하는 방법도 있다
4. 불린값(true or false)을 인자로 보내지 마라
- 함수는 1가지 일만 잘해야 한다는 규칙에 위배
5. 축약어를 쓰지 마라
- 오늘 읽은 소감은?
클린코드 에피소드를 읽을 때 뜨끔했다. 변수명이나 함수명을 지을 때 시간이 없다는 이유로 대충 지어버렸던 때가 많았다. 바로 어제 사수님께 내가 작성한 코드를 피드백 받은 후, 변수명을 다시 짓고 중복된 코드를 정리하느라 작업완료 예상 시간을 초과했다.
클린코드를 작성하기 위해 많은 고민을 해야 하는 것은 사실이다.. 하지만 훨씬 깔끔하게 줄어든 코드를 보면서 굉장히 뿌듯했다!
클린코드는 미래의 나를 위해서 그리고 같이 일하는 팀원들을 위해서 반드시 필요함을 잊지 말자. 클린코드는 사람들의 소중한 시간을 낭비하지 않도록 해준다.
클린코드를 잘 작성하기 위해 많이 생각하고 고민하자. 올바른 클린코드의 예시를 많이 보면서 배우자!
- 떠오르는 생각을 가볍게 적어보세요
프로그램이 돌아간다고 땡이 아니다. 내가 작성한 코드를 부끄럽게 느끼는 것이 아닌 당당함게 보여줄 수 있는 개발자가 되자.
- 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요
해시테이블, 해시함수를 사용한 실제 예시를 보며 더 자세히 공부해보자
'독서 > IT' 카테고리의 다른 글
[IT 5분 잡학사전] 노개북 챌린지 12일차 TIL (0) | 2023.01.25 |
---|---|
[IT 5분 잡학사전] 노개북 챌린지 10일차 TIL (0) | 2023.01.22 |
[IT 5분 잡학사전] 노개북 챌린지 7일차 TIL (1) | 2023.01.20 |
[IT 5분 잡학사전] 노개북 챌린지 6일차 TIL (0) | 2023.01.19 |
[IT 5분 잡학사전] 노개북 챌린지 5일차 TIL (0) | 2023.01.18 |