Post

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. 의미 있는 변수, 함수의 이름을 적절히 사용해라
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가지 역할만 하는 것이 좋아서, 동사로 함수 이름을 지으면 과도하게 많은기능을 수행하고 있는지 아닌지 확인이 가능함
1
2
3
4
5
6
7
// Bad!
// 무슨 함수인지 한번에 파악하기 어려움
function userData() { ... }

// Good!
// 사용자 데이터를 호출하는 함수라고 유추할 수 있음
function loadUserData () { ... }
  1. 매개변수는 너무 많이 쓰지 마라
  • 매개 변수가 많으면 여러 인자값이 전달되기 때문에 숫자만 보는 것으로는 함수의 역할을 파악하기 힘듬
  • 매개변수를 많이 사용해야 한다면 컨피겨레이션 오브젝트 방식으로 매개변수를 묶어서 전달
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: '니꼬'
})
  1. 불린 값을 인자로 보내지마라

    • 불린 값을 바탕으로 참, 거짓 2가지를 처리해야함
    • 함수는 1가지 일만 잘해야 한다는 규칙에 위반되기때문에 불린값은 인자로 보내지 않는게 좋음
  2. 축약어를 쓰지 마라

    • user를 u로 쓰거나 email를 e로 쓰면, u와 e를 보고 user와 email를 떠올리기가 어려우니까
    • user와 email과 같이 작성하는 것이 코드를 읽는데 더 좋음!

에피소드 30 - 코로나가 준 레거시 시스템의 교훈

  • 개발자는 자신이 만든 프로그램에 완벽하게 책임을 져야 함. 개발자가 만든 프로그램은 사람들에게 영향을 주기 때문에

  • 프로그램은 끊임없이 관리해야함

  • 시스템은 한번 구축하면 끝이 아니라, 꾸준히 관리해야 함

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

개발자는 코드를 작성하는 시간보다 함수나 변수 명을 작성하는데 더 오랜 시간을 걸린다는 이유가, 코드를 읽을 때 불필요한 생각을 줄이고 함수나 변수를 이해하기 위해 또 다른 문서를 확인하는 시간을 줄이기 위해서였다는 사실을 알게되었다. 앞으로 코드를 작성하거나 정리할 때 내가 작성한 코드지만 다른 사람들이 이해하기 편하도록, 그리고 나중에 내가 작성한 코드를 볼 때 단번에 이해할 수 있도록 작성하려고 노력해야겠다.

This post is licensed under CC BY 4.0 by the author.