Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back

[IT 5분 잡학사전] TIL #09

by ssy
#book_club
2년 전
606

오늘 TIL 3줄 요약

  • 대표적인 정렬 알고리즘으로 버블 정렬(bubble sort), 선택 정렬(selection sort), 삽입 정렬(insert sort)이 있고, 3가지의 정렬 알고리즘 모두 시간 복잡도가 O(N²)이나, 세부적으로 보았을 때, 속도 차이가 있다.

  • 스택(stack)은 팬케이크와 같이 쌓인 것 중 마지막에 올린 것을 먼저 집어가는 방식의 자료구조이고, 큐(queue)는 버스정류장과 같이 줄을 먼저 선 사람이 먼저 버스를 타는 방식의 자료구조이다. 해시테이블(hash table)은 key 값을 바탕으로 데이터에 접근하는 방식의 자료구조이다.

  • 개발할 시 대부분 팀 단위로 진행되므로, 함께 일하는 사람들 중 누가 읽어도 이해할 수 있게 클린코드로 작성해야 한다. (처음부터 클린코드로 작성할 필요는 없다. 일단 잘 실행되는 코드로 작성하고, 릴리즈 되기 전에는 클린하게 코드를 다듬는 작업을 꼭 해야한다.)

TIL (Today I Learned) 날짜

2023.01.21

오늘 읽은 범위

에피소드 26 - 에피소드 29

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

  1. 정렬(sorting) 알고리즘

    • (흐름을 파악하려면

      https://youtu.be/Bor_CRWEIXo 유튜브 영상을 봅시다..!)

    • 버블 정렬(bubble sort)

      • 배열에서 왼쪽과 오른쪽의 데이터를 비교하면서 작은 데이터가 왼쪽, 큰 데이터가 오른쪽에 위치하도록 정렬하는 방식

      • 시간 복잡도(Big-O 표기법 기준) : O(N²)

        • 첫 번째 사이클에서 N번, 두 번째 사이클에서도 N번.. 이런 식으로 실행된다.

    • 선택 정렬(selection sort)

      • 전체 데이터 중에서 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하여 정렬하는 방식

      • 시간 복잡도(Big-O 표기법 기준) : O(N²)

        • 첫 번째 사이클에서 N번, 두 번째 사이클에서 N-1번, 세 번째 사이클에서 N-2번.. 이런 식으로 실행되므로 버블 정렬보다 효율적이다.

    • 삽입 정렬(insertion sort)

      • 배열에서 앞에 있는 데이터와 비교하면서 작은 데이터를 앞쪽으로 밀어 넣으면서 정렬하는 방식

      • 시간 복잡도(Big-O 표기법 기준) : O(N²)

  2. 자료구조 - 스택(stack) VS. 큐(queue)

    • 스택 :

      LIFO(Last In, First Out)으로, 마지막에 들어간 것이 먼저 나가는 방식

      • 실제 활용 사례

        • 웹 브라우저의 뒤로 가기 버튼 동작

          • 뒤로 가기 버튼 클릭 시, 맨 마지막에 방문한 페이지를 보여준다.

        • 프로그램 내 함수 호출

          • 프로그램 내 함수가 실행되면, 함수 호출 스택(call stack)에 호출된 함수가 쌓여서 맨 마지막에 호출된 함수를 먼저 처리한다.

    • 큐 :

      FIFO(First In, First Out)으로, 첫 번째로 들어간 것이 먼저 나가는 방식

      • 실제 활용 사례

        • 주문 처리 시스템

          • 주문이 들어온 순서대로 처리한다.

        • 프린터

          • 인쇄 요청한 내역 중 먼저 요청한 것부터 순서대로 인쇄한다.

  3. 자료구조 - 해시 테이블(hash table)

    • key - value로 이루어져 있어 key 값을 바탕으로 value에 접근한다.

      • 해시 테이블은 내부적으로 해시 함수를 사용한다.

      • 해시 함수는 특정 기준으로 key 값을 배열의 인덱스로 변환한다.

      • 기준에 따라 서로 다른 key 값이 같은 배열의 인덱스를 가리킬 수 있다. 이런 상황을 해시 충돌(hash collison)이라고 한다.

      • 해시 충돌 대처 방법으로 여러 가지가 있는데, 그 중 한 가지로는 같은 배열의 인덱스에 또 다른 배열을 넣는 것이다.

    • 시간 복잡도(Big-O 표기법 기준) : O(1)

      • 데이터를 검색하는 것 뿐만 아니라 추가, 삭제할 때에도 동일하다.

    • 자료구조를 배열이 아닌 해시 테이블로 구성하면, 데이터 검색 시 시간 복잡도 O(N) -> O(1)가 되므로, 검색 속도를 개선할 수 있다.

  4. 클린 코드 : 코드를 읽기만 해도 이 코드가 무슨 일을 하는지, 어떤 것을 의미하는지 물어볼 필요도 없이 스르륵 이해되는 코드

    • 축약어를 쓰지 마라.

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

    • 함수 이름은 동사로 지어야 하고,

      1개의 함수는 1가지 역할만 해야 한다.

    • boolean 값을 인자로 보내지 마라

      • 해당 인자의 값에 따라 if-else 문 처리를 하게 되어 1개의 함수 1가지 역할에 위배된다.

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

      • 불가피하게 매개변수를 많이 설정해야한다면, configuration object라는 방식으로 매개변수를 묶어 전달하는 것이 좋다.

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

에피소드 26 - 28 내용이 이해하면서 읽는데 시간이 좀 걸렸다보니, 에피소드 29가 쉬어가는 내용처럼 느껴졌네요^^;

<<클린 코드>> 책은 다음 기회에 꼭 읽어봐야겠어요!

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

-

오늘 읽은 다른사람의 TIL