[노개북] It 5분 잡학사전#7 - ep. 26~29
📌 오늘 TIL 3줄 요약
정렬 알고리즘의 특성에 따라 시간 복잡도가 같아도 실제 속도는 상황에 따라서 차이가 날 수 있다.
스택은 브라우저의 뒤로 가기, 되돌리기 단축키, 큐는 소핑몰 주문 처리 시스템 등 실생활에서 찾아볼 수 있다.
클린 코드 작성을 위해서는 불린값을 인자로 보내지말고 함수가 한 가지 동작만 하게 하는 것이 좋다.
📆 TIL (Today I Learned) 날짜
2023-12-10
📚 오늘 읽은 범위
에피소드 26~29
📝 책에서 기억하고 싶은 내용
에피소드 26 정렬 알고리즘이 뭐죠?
버블정렬: 왼쪽, 오른쪽만 보면서 정렬
앞에서부터 리스트를 순회하며 오른쪽 수가 더 작으면 위치를 바꾸면 전부 순회했을 때 가장 큰 수가 끝에 옴
같은 방식으로 정렬된 수를 제외하면서 정렬하면 리스트 전체가 정렬됨
시간복잡도: $O(N^2)$
선택정렬: 하나만 콕 집어서 정렬
전체 데이터 중에 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하는 방식 사용
0번 위치부터 정렬을 시작하면 가장 작은 수를 찾아 위치를 바꾸면 0번 위치는 정렬된 상태
정렬되지 않은 위치부터 시작해서 위 과정을 방복하면 전체 리스트가 정렬됨
시간복잡도: $O(N^2)$, 자리를 바꾸는 연산은 사이클마다 1번 하기 때문에 버블 정렬보다는 효율적
삽입정렬: 앞에 있는 데이터를 보면서 배치하는 정렬
리스트를 순회하면서 현재 수가 앞의 수보다 더 큰 자리에다가 삽입
같은 방식으로 리스트를 순회하면서 정렬
시간복잡도: $O(N^2)$, 선택 정렬, 버블 정렬보다 빠름
시간복잡도는 대략적으로 측정한 것으로 실제 처리 속도는 초기 데이터 상태 등 상황에 따라 다를 수 있음
에피소드 27 스택, 큐가 뭐죠?
스택: LIFO(last in, first out) 규칙을 따라 위에서 데이터를 쌓고, 위에서부터 데이터를 뺌
큐: FIFO(first in, first out) 규칙을 따라 위로 데이터를 쌓고, 아래에서부터 데이터를 뺌
스택, 큐가 사용되는 곳
웹 브라우저의 뒤로 가기 버튼은 스택: 가장 최근의 페이지로 되돌아감
되돌리기 단축키도 스택: 가장 최근의 수정사항을 되돌림
쇼핑몰 주문 처리 시스템은 큐: 먼저 들어온 요청을 먼저 처리
에피소드 28 해시 테이블이 뭐죠?
해시 테이블은 검색 시간이 빠름
배열 검색: O(N)
해시 테이블 검색: O(1)
해시 함수
입력을 배열의 인덱스로 바꿔주는 함수라고 생각하면 됨
만약 해시 함수를 글자 수로 했다면 같은 글자 수를 가진 문자가 입력됐을 때 충돌이 남
이럴 때는 배열 안에 또 다른 배열을 넣어 선형 검색으로 탐색하는 방법을 사용할 수 있음
일반적으로 $O(1)$의 검색 속도를 가지지만 해시 충돌이 발생하는 상황에서는 시간이 더 소요될 수도 있음
에피소드 29 개발자 필수 소양, 클린 코드!
클린 코드란 설명이 필요 없어서 읽기만 해도 코드의 목적, 의미가 이해되는 코드를 말함
클린 코드 작성 꿀팁 5가지
의미 있는 변수, 함수의 이름을 적절히 사용하라
함수 이름은 가급적 동사로 지어라
매개변수는 너무 많이 쓰지 마라
- 많은 매개변수가 필요하면 configuration object 방식으로 묶어서 전달하는 방법을 고려해봐라
불린값을 인자로 보내지마라
함수는 한 가지 일만 하는 것이 좋다.
불린값을 인자로 보내서 if-else 문을 통해 분기문을 작성하는 것을 삼가라
축약어를 쓰지마라
- u, e 보다는 user, email
😀 오늘 읽은 소감 및 떠오르는 생각
오랜만에 기본적인 자료 구조들을 다시 보게 되는데 정말 쉽게 잘 설명이 되어 있는 것 같아 감탄스러웠다. 개발을 아예 모르는 사람도 잘 이해할 수 있게 설명하려면 굉장히 많은 노력이 필요했을 것 같다.
클린코드에서 매개변수를 많이 필요하면 configuration object 방식으로 묶어서 전달하는 방법도 고려하라고 했는데 dart 언어에서는 이를 named parameter 라는 것으로 지원해서 좀 더 편하게 사용할 수 있는 것 같다. 그리고 typescript에서도 비슷한 방식으로 지원한다. 프로그래밍 언어 자체에서도 클린 코드를 작성할 수 있도록 언어 자체를 개선하는 작업도 꾸준히 일어나고 있다고 느껴졌다.
무척이나 간단한 내용 같지만 책 자체가 그렇게 어렵지는 않아서 꾸준히 읽을 수 있고 또 이걸 꾸준하게 공부한 내용으로 기록할 수 있다는 것이 굉장히 큰 장점인 것 같다. 앞으로도 꾸준히 기록해보자!