생각 정리
"좋은 코드는 무엇일까?" 생각하면 제일 먼저 떠오르는 건 가독성이 좋은 코드라고 생각한다. 코드를 읽지 못 한다면, 그 코드를 사용할 수 없기 때문이다. 현재의 내가 만든 코드라도 미래의 내가 읽을 수 있도록, 나와 함께하는 동료들이 쉽게 읽을 수 있는 코드가 제일 중요하다고 생각한다. 그래서 클린 코드가 중요하다고 생각하고 있었다. 그러던 중에 니꼬쌤이 팁을 5가지나 알려주다니!! 오늘도 일용할 양식을 줍줍해간다
읽은 범위
Ep.26 : 정렬 알고리즘이 뭐죠?
Ep.27 : 스택, 큐가 뭐죠?
Ep.28 : 해시테이블이 뭐죠?
Ep.29 : 개발자 필수 소양, 클린코드!
에피소드 26 : 정렬 알고리즘이 뭐죠?
버블 정렬 Bubble sort | 선택 정렬 Selection sort | 삽입 정렬 Insertion sort |
왼쪽, 오른쪽만 보면서 정렬 | 하나를 콕! 집어 가며 정렬 | 앞에 있는 데이터를 보면서 배치하는 정렬 |
2칸짜리 창문을 놓고 오른쪽으로 1칸씩 밀면서 왼쪽과 오른쪽을 비교하는 정렬 방식 | 전체 데이터 중에서 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하는 방식 | 포인트는 교환이 아니라 밀어 넣는다는 것! |
오름차순 기준: 왼쪽이 크면 오른쪽과 자리를 바꿈 = 한 사이클 | 버블 정렬 보다는 훨씬 효율적 자리를 바꾸는 연산은 사이클당 1번씩만 함 |
선택정렬, 버블 정렬 보다 빠르다 |
O(N²) | O(N²) | O(N²) |
에피소드 27 : 스택, 큐가 뭐죠 ?
큐나 스택은 기존 프로그래밍 언어의 문법으로 데이터를 저장할 때 어떤 규칙만 부여하기만 하면 되기 때문에 배열처럼 실제로 존재하는 개념은 아니다.
이러한 개념을 추상 자료구조(abstract data type, ADT) 라고 한다
스택 (Stack) | 큐 (Queue) |
LIFO(last in, first out) | FIFO(first in, first out) |
펜케이크! | 버스정류장 |
배열리 수직으로 쌓여 있고, 맨위를 지정함 | |
값을 추가 하거나 삭제할 때, 맨 위라고 정해 놓은 부분에서만 작업 | 먼저 들어온 데이터가 먼저 빠져나감 |
데이터를 중간에서 빼거나 할수 없음 |
|
위에서 데이터를 쌓는다 |
위로 데이터를 쌓는다 |
위에서 부터 데이터를 뺀다 |
아래에서부터 데이터를 뺀다 |
웹 브라우저 뒤로 가기, 되돌리기 단축키 | 쇼핑몰에서 주문을 처리하는 방식 |
에피소드 28 : 해시 테이블이 뭐죠 ?
개발자가 가장 많이 하는 고민은?! "어떻게 하면 프로그램의 속도를 더 빠르게 만들 수 있을까?
해시 테이블은 키와 값을 짝지어 모은 것, 시간복잡도는 O(1)
O(1) 은 Big-O 표기법으로 표현할 수 있는 가장 빠른 시간 (상수시간)
즉, 해시테이블은 어떤 값을 찾거나 삭제하거나 추가할 때도 딱 한 단계만 거친다
// 배열로 된 메뉴판
menu = [
{ name: "아메리카노", price: 10 },
{ name: "라떼", price: 12 },
{ name: "카모마일차", price: 15 },
{ name: "케이크", price: 45 },
]
// 해시 테이블로 된 메뉴판
menu = {
커피: 10,
라떼: 12,
카모마일차 : 15,
케이크: 45,
};
해시테이블은 배열 형태로 구성 되어 있어
해시테이블 속도의 비결은 해시 함수
해시함수는 검색할 때 쓰는 키를 숫자, 즉 인덱스로 바꿔주는 역할을 해
이 해시함수는 함수의 키가 글자수 그대로 인덱스를 반환하도록 한 해시 함수야
그런데 글자수가 같으면 어떻게 해야할까?
이런 상황을 해시충돌(hash collison) 이야
여러 방법 중 하나인 같은 인덱스 안에 또 다른 배열을 넣는 방법을 알려줄게
에피소드 29 : 개발자 필수 소양, 클린 코드!
클린 코드란! 설명이 필요없는 코드를 말해!
1. 의미 있는 변수, 함수의 이름을 적절히 사용하라
setInterval(eatKimchi, 86400); // 86400 ? 무슨 뜻이지 ?
const SECONDS_IN_A_DAY = 86400;
setInterval(eatKimchi, SECONDS_IN_A_DAY) // 아! 하루를 초로 바꾼거구나!!
2. 함수 이름은 가급적 동사로 지어라
function userDate() {
...
}
function loadUserDate() {
...
}
함수이름을 보면 '사용자의 데이터를 불러오는 함수구나' 라고 유추할 수 있지
또한 함수는 1가지 역할만 하는 것이 좋아
3. 매개변수를 너무 많이 사용하지 마라
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: '니꼬'
})
4. 불린값을 인자로 보내지마라
function sedMessage(text, isPrivate){
if(isPrivate){
...
} else {
...
}
}
//if~else 문은 실행분기를 나누는 문법인데,
//그렇다면 sedMessage 함수에서 isPrivate의 참, 거짓에 따라 2가지 일을 처리해야 한다는 것을 의미해
//'함수는 1가지 일만 잘해야 한다' 는 규칙에 위배돼
//그러니 불린값은 인자로 보내지 않는 것이 좋아
5. 축약어를 쓰지 마라
나 혼자만 알아 볼 수 있을 만한 축약어를 쓰면 안돼
누가 u, e 를 보고 user, email 을 떠올리겠어? 너무 황당하잖아
'개발 이야기 > 개발 도서' 카테고리의 다른 글
IT 5분 잡학사전 #8 (0) | 2023.02.22 |
---|---|
IT 5분 잡학사전 #7 (0) | 2023.02.21 |
IT 5분 잡학사전 #5 (0) | 2023.02.17 |
IT 5분 잡학사전 #4 (0) | 2023.02.16 |
IT 5분 잡학사전 #3 (0) | 2023.02.15 |