개발 이야기/개발 도서

IT 5분 잡학사전 #6

sonoa 2023. 2. 20. 14:33
반응형

생각 정리 

"좋은 코드는 무엇일까?" 생각하면 제일 먼저 떠오르는 건 가독성이 좋은 코드라고 생각한다. 코드를 읽지 못 한다면, 그 코드를 사용할 수 없기 때문이다. 현재의 내가 만든 코드라도 미래의 내가 읽을 수 있도록, 나와 함께하는 동료들이 쉽게 읽을 수 있는 코드가 제일 중요하다고 생각한다. 그래서 클린 코드가 중요하다고 생각하고 있었다. 그러던 중에 니꼬쌤이 팁을 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