개발자 99% 커뮤니티에서 수다 떨어요!
오늘 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
책에서 기억하고 싶은 내용을 써보세요.
정렬(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²)
자료구조 - 스택(stack) VS. 큐(queue)
스택 :
LIFO(Last In, First Out)으로, 마지막에 들어간 것이 먼저 나가는 방식
실제 활용 사례
웹 브라우저의 뒤로 가기 버튼 동작
뒤로 가기 버튼 클릭 시, 맨 마지막에 방문한 페이지를 보여준다.
프로그램 내 함수 호출
프로그램 내 함수가 실행되면, 함수 호출 스택(call stack)에 호출된 함수가 쌓여서 맨 마지막에 호출된 함수를 먼저 처리한다.
큐 :
FIFO(First In, First Out)으로, 첫 번째로 들어간 것이 먼저 나가는 방식
실제 활용 사례
주문 처리 시스템
주문이 들어온 순서대로 처리한다.
프린터
인쇄 요청한 내역 중 먼저 요청한 것부터 순서대로 인쇄한다.
자료구조 - 해시 테이블(hash table)
key - value로 이루어져 있어 key 값을 바탕으로 value에 접근한다.
해시 테이블은 내부적으로 해시 함수를 사용한다.
해시 함수는 특정 기준으로 key 값을 배열의 인덱스로 변환한다.
기준에 따라 서로 다른 key 값이 같은 배열의 인덱스를 가리킬 수 있다. 이런 상황을 해시 충돌(hash collison)이라고 한다.
해시 충돌 대처 방법으로 여러 가지가 있는데, 그 중 한 가지로는 같은 배열의 인덱스에 또 다른 배열을 넣는 것이다.
시간 복잡도(Big-O 표기법 기준) : O(1)
데이터를 검색하는 것 뿐만 아니라 추가, 삭제할 때에도 동일하다.
자료구조를 배열이 아닌 해시 테이블로 구성하면, 데이터 검색 시 시간 복잡도 O(N) -> O(1)가 되므로, 검색 속도를 개선할 수 있다.
클린 코드 : 코드를 읽기만 해도 이 코드가 무슨 일을 하는지, 어떤 것을 의미하는지 물어볼 필요도 없이 스르륵 이해되는 코드
축약어를 쓰지 마라.
의미 있는 변수, 함수의 이름을 적절히 사용하라
함수 이름은 동사로 지어야 하고,
1개의 함수는 1가지 역할만 해야 한다.
boolean 값을 인자로 보내지 마라
해당 인자의 값에 따라 if-else 문 처리를 하게 되어 1개의 함수 1가지 역할에 위배된다.
매개변수는 너무 많이 쓰지 마라
불가피하게 매개변수를 많이 설정해야한다면, configuration object라는 방식으로 매개변수를 묶어 전달하는 것이 좋다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
에피소드 26 - 28 내용이 이해하면서 읽는데 시간이 좀 걸렸다보니, 에피소드 29가 쉬어가는 내용처럼 느껴졌네요^^;
<<클린 코드>> 책은 다음 기회에 꼭 읽어봐야겠어요!
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
-
오늘 읽은 다른사람의 TIL
hyeond0님의 TIL (https://nomadcoders.co/community/thread/6721)