[노개북] 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가지

    1. 의미 있는 변수, 함수의 이름을 적절히 사용하라

    2. 함수 이름은 가급적 동사로 지어라

    3. 매개변수는 너무 많이 쓰지 마라

      • 많은 매개변수가 필요하면 configuration object 방식으로 묶어서 전달하는 방법을 고려해봐라
    4. 불린값을 인자로 보내지마라

      • 함수는 한 가지 일만 하는 것이 좋다.

      • 불린값을 인자로 보내서 if-else 문을 통해 분기문을 작성하는 것을 삼가라

    5. 축약어를 쓰지마라

      • u, e 보다는 user, email

😀 오늘 읽은 소감 및 떠오르는 생각

  • 오랜만에 기본적인 자료 구조들을 다시 보게 되는데 정말 쉽게 잘 설명이 되어 있는 것 같아 감탄스러웠다. 개발을 아예 모르는 사람도 잘 이해할 수 있게 설명하려면 굉장히 많은 노력이 필요했을 것 같다.

  • 클린코드에서 매개변수를 많이 필요하면 configuration object 방식으로 묶어서 전달하는 방법도 고려하라고 했는데 dart 언어에서는 이를 named parameter 라는 것으로 지원해서 좀 더 편하게 사용할 수 있는 것 같다. 그리고 typescript에서도 비슷한 방식으로 지원한다. 프로그래밍 언어 자체에서도 클린 코드를 작성할 수 있도록 언어 자체를 개선하는 작업도 꾸준히 일어나고 있다고 느껴졌다.

  • 무척이나 간단한 내용 같지만 책 자체가 그렇게 어렵지는 않아서 꾸준히 읽을 수 있고 또 이걸 꾸준하게 공부한 내용으로 기록할 수 있다는 것이 굉장히 큰 장점인 것 같다. 앞으로도 꾸준히 기록해보자!