Skip to main content

Command Palette

Search for a command to run...

[노개북] It 5분 잡학사전#7 - ep. 26~29

Updated
3 min read

📌 오늘 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에서도 비슷한 방식으로 지원한다. 프로그래밍 언어 자체에서도 클린 코드를 작성할 수 있도록 언어 자체를 개선하는 작업도 꾸준히 일어나고 있다고 느껴졌다.

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

More from this blog

오픈소스 기여모임 10기 후기 - 첫 Pr을 올리기까지

개발자라면 누구나 한 번쯤 오픈소스 기여에 대한 환상을 가져본 적 있을 거다. 하지만 막상 시작하려면 어디서부터 해야 할지 막막하고, 괜히 대단한 걸 해야 할 것 같은 부담감에 선뜻 시작하기는 어려운 것 같다. 나 또한 해보고 싶다는 마음만 가지고 계속 미뤄왔다. 그러다 2025년 말 쯤에 오픈채팅방과 글또 슬랙 채널에서 "오픈소스 기여모임" 10기 모집글을 봤다. 2년 넘게 500명 이상의 참가자와 함께 1000개 이상의 PR을 만들어온 커뮤...

Feb 5, 20265 min read

😢 글또 10기 활동 회고 — “글또야, 가지 마…”

들어가며 드디어 글또 10기 활동 회고를 정리해본다.6개월간의 여정을 뒤돌아보니 정말 많은 일들이 있었다. 글또라는 커뮤니티를 8기가 한창 진행되고 있을 때 알았는데 이름부터 인상이 강렬했다. "글쓰는 또라이가 세상을 바꾼다." 유쾌하고 독특한 문구에 피식 웃으며, '여긴 도대체 어떤 사람들이 모이는 곳이지?' 하고 넘겼었다. 재밌는 건 결국, 나도 그 "또라이들" 중 한 명이 되었다는 것이다. 😌 글또는 개발자들이 2주에 한 번 글을 ...

Jul 31, 20255 min read
😢 글또 10기 활동 회고 — “글또야, 가지 마…”

Serverless 환경에서 배포 전 환경변수 검증 자동화하기: TypeBox와 Bitbucket Pipeline 활용기

들어가며 배포 직후, 환경변수가 제대로 설정되지 않아 여러 API가 제대로 작동하지 않는 일이 있었습니다. 다행히 밤에 사용자가 없을 때 문제가 있었던 거라 영향도는 크지 않았지만 앞으로도 계속해서 발생할 수 있는 문제이기 때문에 해결해야 겠다고 생각했습니다. 개발 단계에서 문제가 발견되면 가장 좋겠지만, 현재 팀 상황에서는 백엔드 개발을 혼자 담당하고 있어 코드 리뷰나 검증 프로세스를 갖추기가 쉽지 않았습니다. 그래서 최소한 배포 전에 자동으...

Mar 16, 20254 min read

Cloudflare Tunnel로 포트포워딩 없이 홈서버 운영하기

이 글에서 다루는 내용 포트포워딩이 안 되는 이유 (CGNAT 환경 이해) CGNAT 우회 방법들의 장단점 비교 Cloudflare Tunnel 설정 방법 (MacOS 기준) 외부에서 내 PC로 접근할 수 있도록 허용하는 방법을 생각하면 포트포워딩이 가장 먼저 떠오릅니다. 공유기에서 특정 포트를 열어 외부에서 서버에 접속할 수 있도록 설정하는 방식으로, 마인크래프트 멀티를 해보셨던 분이라면 분명 해보셨을 방법입니다. 😊 작년에 저는 홈서...

Mar 2, 20256 min read
Cloudflare Tunnel로 포트포워딩 없이 홈서버 운영하기

구름고래 공방

48 posts

[노개북] It 5분 잡학사전#7 - ep. 26~29