개발세발

[IT잡학사전] DAY 06 본문

인터넷 배움/노마드코더 - IT잡학사전

[IT잡학사전] DAY 06

뉼👩🏻‍💻 2023. 1. 20. 07:17
728x90
반응형
SMALL

 

 

기록 날짜

2023. 01. 19 목요일 

 

 

오늘 읽은 범위

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

27. 스택, 큐가 뭐죠?

28. 해시 테이블이 뭐죠?

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

30. 코로나가 준 레거시 시스템의 교훈

 

 

책에서 기억하고 싶은 내용 

 

 

* 정렬 sort 알고리즘 

 

◼️ 버블 정렬 bubble sort

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘

시간 복잡도 : O(N2)   // 시간복잡도가 O(N2)인 알고리즘은 좋은 알고리즘이라고 하지 않음

 

◼️ 선택 정렬 selection sort

제자리 정렬 알고리즘의 하나

- 주어진 리스트 중에 최소값을 찾는다.

- 그 값을 맨 앞에 위치한 값과 교체한다.

- 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.

시간 복잡도 : O(N2)   // 자리 바꾸는 연산은 사이클당 1번씩만 하기 때문에 버블 정렬보다는 효율적 

 

◼️ 삽입 정렬 insertion osrt 

- 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘

- 교환이 아니라 밀어넣는다는 점이 포인트 

- 시간 복잡도 : O(N2) // 하지만 버블, 선택 정렬 보다 빠름 

 

 

* 시간 복잡도는 같은데 왜 속도 차이가 날까 

- 시간 복잡도가 같다는 것은 시간 복잡도를 단순히 측정했을 때의 경우 

- 알고리즘은 초기 데이터 상태에 따라 처리 속도가 달라진다는 특징이 있으므로 기계적으로 측정한 시간 복잡도는 같아도 평균적으로 빠른 알고리즘이 있을 수 있음 

 

 

 

* 추상 자료 구조 abstract data type 

- 컴퓨터 과학에서 자료들과 그 자료들에 대한 연산들을 명기한 것

- 추상적 자료형은 구현 방법을 명시하고 있지 않다는 점에서 자료 구조와 다르다.

 

* 해시 테이블 

: 키와 값을 짝지어 모은 것 

- 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조

- 시간 복잡도 : O(1) // big-O 표기법으로 표현할 수 있는 가장 빠른 시간(상수 시간) 

➡️해시 테이블의 일반적인 검색 시나리오를 봤을 때를 고려한 경우 

 

◼️ 해시 충돌 hash collison

- 해시 함수가 서로 다른 두 개의 입력값에 대해 동일한 출력값을 내는 상황

- 충돌을 처리해야되는 경우가 있을 수 있으므로 항상 O(1)인 것은 아님

 

 

* 클린코드

= 설명이 필요없는 코드

- 코드를 읽기만해도 이 코드가 무슨 일을 하는지, 어떤 것을 의미하는지 물어볼 필요도 없이 이해되는 코드 

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

* 함수 이름은 가급적 동사로 짓기

* 매개변수를 너무 많이 사용하지 말기 

* 불린값을 인자로 보내지 말기  : 함수는 1가지 일만 잘하는 것이 좋은데 불린값을 보내면 참/거짓에 따른 처리를 해야하므로 지양 

* 축약어를 쓰지 말기 : ex. user를 u라고 표기 

 

 

* 레거시 시스템 (legacy system) 

: 오래 전에 개발된 시스템

 ➡️ 프로그램은 책임 있게 만들어야 한다 : 당장 돌아가기만 하면 그만인게 중요한것이 아니다

➡️ 프로그램은 끊임없이 관리해야 한다 

 

 


 

시간복잡도와 여러 정렬에 대한 기초를 한 번 더 훑을 수 있었다. 

프론트엔드 수업을 들으면서 어떻게 보면 알고리즘과는 먼 생활을 했다. 그러다보니 이제 슬슬 상태관리도 상태관리이지만 내가 짠 코드가 얼마나 효율적인가를 고민하게 되었다. 여러 상태를 배열에 넣어두고 원하는 특정 상태값을 탐색할 때 너무 무식한 방법으로 탐색하고 있었던 것은 아닌지, 내가 짠 코드가 정말 효율적인가를 고민하게 되었다. 

그리고 클린코드! 난 이번 프로젝트에서 얼마나 클린코드를 하기 위해 노력했는가를 다시 한 번 생각해 볼 수 있었다. 프로젝트가 끝난 이후라도 꼭 리팩토링도 전체적으로 한 번 하고 내 코드를 다시금 많이 바라보는 시간을 가져야겠다. 

 

뭔가 새로운 국면을 맞이하며 다시금 시작하는 기분을 느낄 수 있었다. 

728x90
반응형

'인터넷 배움 > 노마드코더 - IT잡학사전' 카테고리의 다른 글

[IT잡학사전] DAY 08  (0) 2023.01.21
[IT잡학사전] DAY 07  (0) 2023.01.20
[IT잡학사전] DAY 05  (0) 2023.01.18
[IT잡학사전] DAY 04  (0) 2023.01.18
[IT잡학사전] DAY 03  (0) 2023.01.15