TIL - day 9
Day 9
오늘 읽은 범위
에피소드 26 ~ 에피소드 30
책에서 기억하고 싶은 내용을 써보세요
에피소드 26 - 정렬 알고리즘이 뭐죠?
버블 정렬
- 왼쪽과 오른쪽 2개를 비교하면서 정렬
- 사건 복잡도 O(N²)
Eg. 1 4 5 3 2 6 (오름차순 정렬)
1과 4를 비교 => 4와 5을 비교 => 5와 3을 비교 => 5와 2를 비교 => 5와 6을 비교
사이클1 : 1 4 3 2 5 6 순으로 정렬
모두 정렬이 될 때 까지 반복…선택 정렬
- 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하는 방식
Eg. 8 6 2 1 3 4 9 5 7 (오름차순 정렬)
8부터 탐색 => 현재 가장 작은 숫자 8 => 6 2 1로 가며 가장 작은 숫자 탐색,
=> 가장 작은 데이터인 1의 위치 확인 후 8과 위치를 변경
1 6 2 8 3 4 9 5 7
다시 6부터 정렬…삽입 정렬
- 앞에 있는 데이터를 보며 배치
Eg. 8 6 2 1 3 4 9 5 7
앞에 있는 데이터를 보면서 정렬하기 때문에 6부터 비교 시작 => 6이 8보다 작으니까 6을 밀어넣음
=> 2는 8과 6보다 작으니까 맨 앞으로 밀어 넣기
=> 2 6 8 1 3 4 9 5 7
모두 정렬이 될 때까지 반복
에피소드 27 - 스택, 큐가 뭐죠?
큐, 스택
- 실제로 존재하는 개념이 아님
- 기존 프로그래밍 언어의 문법으로 데이터를 저장할 때 어떤 규칙을 부여하기만 하면 됨
스택
- LIFO (last in, First out) - 마지막에 들어간 것이 처음으로 나옴
- Eg. 브라우저 뒤로가기 버튼, 되돌리기
큐
- FIFO (First in, First out) - 먼저 들어간 것이 먼저 나온다 (선입선출)
- Eg. 쇼핑몰 주문처리 시스템
에피소드 28 - 해시 테이블이 뭐죠?
- 해시 테이블에서는 어떤 값을 찾더라도 딱 한단계만 거쳐. 데이터를 추가 삭제할 때도 효율이 좋음
- 해시테이블은 배열의 형태로 구성
- 키값이 같은 경우 해시 충돌이 일어날 수 있음 => 같은 인덱스에 또 다른 배열을 넣어서 선형 검색으로 해당 값을 찾음
에피소드 29 - 개발자 필수 소양, 클린 코드
클린코드란 설명이 필요없는 코드를 말해.코드를 읽기만 해도 이 코드가 무슨일을 하는지, 어떤 것을 의미하는지 물어볼 필요도 없이 스르륵 이해되는 코드
- 의미 있는 변수, 함수의 이름을 적절히 사용해라
1
2
3
4
5
6
7
8
// Bad!
// 86400이 무슨 뜻인지 모르기때문에
setInterval(eatKimchi, 86400);
// Good!
// 86400은 하루를 초로 반환한 값이라고 명시
const SECONDS_IN_A_DAY = 86400;
setInterval(eatKimchi, SECONDS_IN_A_DAY);
함수 이름은 가급적 동사로 지어라
- 함수는 1가지 역할만 하는 것이 좋아서, 동사로 함수 이름을 지으면 과도하게 많은기능을 수행하고 있는지 아닌지 확인이 가능함
1
2
3
4
5
6
7
// Bad!
// 무슨 함수인지 한번에 파악하기 어려움
function userData() { ... }
// Good!
// 사용자 데이터를 호출하는 함수라고 유추할 수 있음
function loadUserData () { ... }
- 매개변수는 너무 많이 쓰지 마라
- 매개 변수가 많으면 여러 인자값이 전달되기 때문에 숫자만 보는 것으로는 함수의 역할을 파악하기 힘듬
- 매개변수를 많이 사용해야 한다면 컨피겨레이션 오브젝트 방식으로 매개변수를 묶어서 전달
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Bad!
function makePayment(price, productId,size,quantity,userId){ ... }
makePayment (35, 5, 'xl', 2, '니꼬')
// Good!
function makePayment( {price, productId,size,quantity,userId} ){ ... }
makePayment ({
price: 35,
productId: 5,
size: 'xl',
quantity:2,
userId: '니꼬'
})
불린 값을 인자로 보내지마라
- 불린 값을 바탕으로 참, 거짓 2가지를 처리해야함
- 함수는 1가지 일만 잘해야 한다는 규칙에 위반되기때문에 불린값은 인자로 보내지 않는게 좋음
축약어를 쓰지 마라
- user를 u로 쓰거나 email를 e로 쓰면, u와 e를 보고 user와 email를 떠올리기가 어려우니까
- user와 email과 같이 작성하는 것이 코드를 읽는데 더 좋음!
에피소드 30 - 코로나가 준 레거시 시스템의 교훈
개발자는 자신이 만든 프로그램에 완벽하게 책임을 져야 함. 개발자가 만든 프로그램은 사람들에게 영향을 주기 때문에
프로그램은 끊임없이 관리해야함
시스템은 한번 구축하면 끝이 아니라, 꾸준히 관리해야 함
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
개발자는 코드를 작성하는 시간보다 함수나 변수 명을 작성하는데 더 오랜 시간을 걸린다는 이유가, 코드를 읽을 때 불필요한 생각을 줄이고 함수나 변수를 이해하기 위해 또 다른 문서를 확인하는 시간을 줄이기 위해서였다는 사실을 알게되었다. 앞으로 코드를 작성하거나 정리할 때 내가 작성한 코드지만 다른 사람들이 이해하기 편하도록, 그리고 나중에 내가 작성한 코드를 볼 때 단번에 이해할 수 있도록 작성하려고 노력해야겠다.