[노개북] IT 5분 잡학사전 #07 - TIL ep.26~29

dev_vming·2023년 12월 16일
0

NomadBookClub

목록 보기
7/11

📖 노개북 TIL #07 ep.26~29


📌 기억하고 싶은 내용

ep.26 정렬 알고리즘이 뭐죠?

버블 정렬은 2칸짜리 창문을 놓고 오른쪽으로 1칸씩 밀면서 왼쪽과 오른쪽을 비교하는 방식으로 정렬한다. 데이터를 순회하며 두 데이터씩 비교하고, 원하는 정렬 방식에 따라 자리를 바꾸어 준다. 이러한 작업을 한 사이클이라고 한다. 두번째 사이클부터는 이 전 사이클의 마지막 위치를 제외하고 진행한다. (155p)

선택 정렬은 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하는 방식으로 작업을 진행한다. 데이터를 순회하며 가장 작은 데이터의 위치를 기억하고 해당 데이터를 맨 앞 데이터와 자리를 바꾼다. 여기까지가 한 사이클이고, 다음 사이클부터는 맨 앞의 데이터를 제외하고 진행한다. (156p)

삽입 정렬은 앞에 있는 데이터를 보며 배치한다는 특징이 있다. 데이터를 순회하면서 해당 데이터보다 앞에 위치하는 데이터들과 크기를 비교해 적절한 부분에 데이터를 밀어 넣는다. 다음 사이클 부터는 밀어넣은 데이터와 비교 대상들을 제외하고 진행한다. (158p)

버블정렬, 선택 정렬, 삽입 정렬의 시간 복잡도는 모두 O(N²)으로 같다. 하지만 속도는 삽입 정렬, 선택 정렬, 버블정렬 순으로 빠르다. 시간 복잡도가 같은 것은 단순히 측정했을 때의 의미이기 때문에 평균적으로 빠른 알고리즘이 존재할 수 있다. (159p)

ep.27 스택, 큐가 뭐죠?

스택은 위에서 데이터를 쌓고, 위에서부터 데이터를 뺀다는 규칙을 가진 자료구조이다. 이러한 방식을 LIFO(last in, first out)라고 한다.(164p)

는 위로 데이터를 쌓고, 아래에서부터 데이터를 뺸다는 규칙을 가진 자료구조이다. 이러한 방식을 FIFO(first in first out)라고 한다.(165p)

웹 브라우저의 뒤로가기 버튼, 되돌리기 단축키는 스택, 쇼핑몰 주문처리 시스템은 큐이다. (166p)

ep.28 해시 테이블이 뭐죠?

배열은 인덱스라는 번호로 접근해야한다. 하지만 해시테이블은 배열에 해시 함수라는 것이 세트로 있는 것이다. 바로 검색하고자 하는 데이터를 찾아낼 수 있기 때문에 시간 복잡도는 O(1)이다. (170p)

피자집을 예로들어 살펴보자. 글자 수를 그대로 인덱스로 반환하도록 구성한 해시함수가 있다면, 피자와 치킨 모두 인덱스 2번에 속할 것이다. 그런데 두 메뉴의 가격이 다르다면? 이런 상황을 해시 충돌(hash collison)이라고 한다. 이럴 때에는 같은 인덱스에 또 다른 배열을 넣어 해시 충돌에 대처할 수 있다. 이와 같이 충돌을 추가로 처리해줘야 할 수 있기 때문에 항상 시간복잡도가 O(1)이 아닐 수 있다. (172p)

ep.29 개발자 필수 소양, 클린 코드!

클린 코드란 설명이 필요 없는 코드를 말한다. 코드를 읽기만 해도 이 코드가 무슨 일을 하는지, 어떤 것을 의미하는 지 물어볼 필요없이 이해되는 코드 말이다. (174p)

클린 코드 백서 1. 의미있는 변수, 함수의 이름을 적절히 사용하기. (174p)
클린 코드 백서 2. 함수 이름은 가급적 동사로 짓기. (175p)
클린 코드 백서 3. 너무 많은 매개변수는 지양하기. (176p)
클린 코드 백서 4. boolean 값을 인자로 보내지 말기. (177p)
클린 코드 백서 5. 축약어를 사용하지 말기. (178p)


💬 오늘의 소감

클린코드가 뭔지 몰랐지만 고민하고 있었던

팀 프로젝트를 하다보면 다양한 사람들의 코드를 볼 수 있는데, 다른 사람의 코드가 읽기 힘들었거나 왜 이런식으로 작성을 했는지 알기 어려울 때가 있었다. 그런 코드를 보다보면 나는 어떻게 작성을 해야될 지 고민을 하게 되었는데, 이게 클린 코드로 나아가는 한 걸음이 아니였던가 싶다. 다만, 어떻게 해야될 지에 대해서는 답을 찾지 못했었는데 클린 코드에 대해 자세히 알아보고 적용할 수 있도록 해야겠다.


🔍 궁금하거나 잘 이해되지 않는 내용

ep.28 해시 테이블이 뭐죠?

해시 테이블에 대해 책에서 자세히 설명을 해주었는데, 자바스크립트의 객체와 비슷한 느낌이라고 생각되었다. 아직 100% 이해하지 못한 것 같아 조금 더 찾아보며 파악해 볼 필요가 있을 것 같다.

참고할 링크1
참고할 링크2


✅ 오늘의 미션

나의 번아웃 극복 방법 슬랙에 공유하기


📓 참고

(이지스퍼블리싱) 노마드코더 - IT 5분 잡학사전 챌린지

profile
밍기적 개발하기🐛

0개의 댓글