[노마드 북클럽] TIL (2023.1.21)

mycogno·2023년 1월 21일
0

오늘 읽은 범위

IT 5분 잡학사전
에피소드 26 ~ 에피소드 29

책에서 기억하고 싶은 내용을 써보세요.

ep.26

  • 버블 정렬은 첫번째 원소부터 마지막 원소까지 서로 자리를 바꾸는 연산을 한 사이클로 하여 n번 씩 사이클을 돌려 정렬하는 O(n^2)의 정렬 알고리즘이다.
  • 선택 정렬은 가장 작은 데이터 또는 가장 큰 데이터의 위치를 기억하여 자리를 바꾸어 정렬된 자리를 찾아가는 O(n^2)의 알고리즘이며, 자리를 바꾸는 연산을 사이클 당 1번만 하므로 버블 정렬보다 빠르다.
  • 삽입 정렬은 앞에 있는 데이터와 비교하면서 제자리에 밀어 넣는 방식으로 정렬하는 알고리즘이며 O(n^2)이지만 평균적으로 버블 정렬과 선택 정렬보다 빠르다.

ep.27

  • 큐, 스택은 실제로 구현된 구조가 아닌 마치 상상으로 정한 규칙과 같다.
  • 이런 개념을 추상 자료구조(abstract data type, ADT)라고 한다.
  • 배열이라는 실질 자료구조에 큐 또는 스택에 해당하는 규칙을 부여하여 자료구조를 만들 수 있다.
  • 스택은 last in first out(마지막으로 들어간 것이 처음으로 나온다) 규칙을 가지고 있다.
  • 큐는 first in first out(처음 들어간 것이 처음으로 나온다) 규칙을 가지고 있다.

ep.28

  • 해시 테이블은 임의의 key를 배열의 인덱스 처럼 사용하여 value에 접근할 수 있는 자료구조이다.
  • 해시 테이블에서 특정 key를 통해 value에 접근하는 연산의 시간 복잡도는 O(1)이며, 검색, 데이터 추가, 삭제 등 모두 O(1)이므로 효율적이다.
  • 해시 테이블은 배열 형태로 구현되어 있으며 key를 임의의 인덱스로 변환하는 해시 함수를 사용한다.
  • 서로 다른 입력에 대한 해시 함수의 반환값이 서로 같아지는 경우를 해시 충돌(hash collison) 이라고 한다.

ep.29

  • 클린 코드는 추가적인 설명 없이 코드만 읽고 어떤 일을 하는지 이해할 수 있는 코드를 말한다.
  • 클린 코드를 위해 다음과 같은 것들을 할 수 있다.
    • 의미 있는 변수, 함수명 사용하기
    • 동사로 함수 이름 짓기
    • 너무 많은 매개변수 쓰지 않기
    • boolean값 인자로 보내지 않기
    • 축약어 사용하지 않기
  • 처음부터 꼭 클린 코드를 작성하려고 할 필요는 없다.(그렇게 하기 어렵다.) 일단 잘 실행되도록 코드를 작성하고 나중에 코드를 다듬으면 된다.

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

잊어버렸던 여러가지 정렬 알고리즘을 다시 복습할 수 있어서 좋았다. ADT에 대해서도 다시 알아볼 수 있어서 좋았다. (처음 배울 때 되게 헷갈리고 이해가 안되었던 개념이었다.)

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

클린 코드를 작성할 때 함수에서 'boolean값을 인자로 보내지 않기'가 있었는데 함수가 한 가지 일을 하지만 boolean에 의해 조금의 로직만 바뀌어서 boolean을 인자로 받도록 함수를 작성한다면 이는 클린 코드라고 할 수 없는 것일까?

profile
What's on your mind?

0개의 댓글