Home IT 5분 잡학 사전 6
Post
Cancel

IT 5분 잡학 사전 6

TIL - DAY 6

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

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

실생활에서 가장 상상하기 쉬운 정렬 알고리즘 3가지!

  • 왼쪽, 오른쪽만 보면서 정렬하는 버블 정렬(bubble sort)
    • 오름차순으로 정렬 시 왼쪽과 오른쪽을 비교, 왼쪽이 크면 오른쪽과 자리를 바꿔준다.
    • 시간 복잡도: O(n^2) 버블 정렬 gif
  • 하나를 콕 집어 가며 정렬하는 선택 정렬(selection sort)
    • 전체 데이터 중에서 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하는 방식으로 작업 진행
    • 시간 복잡도: O(n^2) 하지만, 버블 정렬 보다는 효율적이다. https://raw.githubusercontent.com/GimunLee/tech-refrigerator/master/Algorithm/resources/selection-sort-001.gif
  • 앞에 있는 데이터를 보면서 배치하는 삽입 정렬(insertion sort)
    • 1번째 데이터 부터 비교시작, 작은 수를 앞으로 밀어 넣는다.
    • 시간 복잡도: O(n^2) ?? https://raw.githubusercontent.com/GimunLee/tech-refrigerator/master/Algorithm/resources/insertion-sort-001.gif

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

시간 복잡도가 같다고 한 것은 시간 복잡도를 단순히 측정했을 때 그렇다는 뜻, 알고리즘은 초기 데이터 상태에 따라 처리 속도가 달라진다. 기계적으로 측정한 시간 복잡도는 같아도 평균적으로 빠른 알고리즘은 있을 수 있다.

27. 스택(stack), 큐(queue)가 뭐죠?

규칙 개념의 자료구조

큐, 스택은 배열처럼 실제로 존재하는 개념이 아닌, 개발자의 상상 속 개념→ 추상 자료구조(abstract data type, ADT)

팬케이크로 생각해보는 스택

팬케이크를 차곡차곡 쌓는다고 생각 → 위에서 부터 아래로 먹는다

  • 위에서 데이터를 쌓는다.
  • 위에서 부터 데이터를 뺀다.
  • LIFO(last in, first out)

버스정류장으로 생각해 보는 큐

가장 먼저 줄 선 사람이 버스에 먼저 탄다

  • 위로 데이터를 쌓는다.
  • 아래서 부터 데이터를 뺀다.
  • FIFO(first in, first out)

스택, 큐의 사용

스택: 웹 브라우저의 뒤로가기 버튼, 되돌리기 단축키(ctl+z)

큐: 쇼핑몰 주문 처리 시스템

28. 해시 테이블이 뭐죠?

해시 테이블 콘셉트 이해하기

키와 값을 짝지어 모은 것(사전에 비유하면, 키는 사전에서 단어, 값은 단어의 뜻)

배열 검색과 해시 테이블 검색의 시간 복잡도 차이는?

선형 검색 O(N)

해시 테이블 O(1) → Big-O 표기법에서 표현할 수 있는 가방 빠른 시간(상수 시간)

해시 테이블 속도의 비결, 해시 함수

글자 수를 그대로 인덱스로 반환하도록 구성, 글자 수가 같다면, 다시 선형 검색으로 찾는다.

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

클린 코드를 위한 5가지 쿨팁

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

  1. 의미 있는 변수, 함수의 이름을 적절히 사용해라
  2. 함수 이름은 가급적 동사로 지어라
  3. 매개변수는 너무 많이 쓰지 마라
  4. 불린값을 인자로 보내지 마라
  5. 축약어를 쓰지 마라

📺 함께 본 영상

https://www.youtube.com/watch?v=Jz8Sx1XYb04

클린코드: 좋은 코드란 코드 그 자체로 설명이 다 되는 코드, 코드가 당연히 작동도 잘되고, 부연 설명이 필요없는 상태

검색이 가능한 이름을 사용

❌ Don’t

1
setInterval(eatKimchi, 86400)

⭕️ Do

1
2
const SECONDS_IN_A_DAY = 86400;
setInterval(eatKimchi, SECONDS_IN_A_DAY)

함수명은 동사를 사용 (액션 중심으로 이름 생성, 여러 기능이 하나에 함수에 들어가지 않았는지 고민하게 됨)

❌ Don’t

1
2
3
4
function userData(){
	// ../
}
const data = userData();

⭕️ Do

1
2
3
4
function userData(){
	// ../
}
const userData = loadUserData();

함수는 무조건! 단 한가지 액션만 수행해야 한다

❌ Don’t

1
2
3
4
5
6
7
8
9
10
11
12
function loadUserData() {
	const value = `; ${document.cookie}`;
	const parts = value.split(`; user_id=`);
	if (parts.length === 2) {
		const cookie = parts.pop().splite(",").shift();
		// load data using the cookie
	}
}

const userData = loadUserData();

// 해당 함수가 불러오는 것 뿐만 아니라 다른 기능도 한다면, 해당 함수를 쪼개야 한다

⭕️ Do

1
2
3
4
5
6
7
8
9
10
11
12
function getCookie() {
	const value = `; ${document.cookie}`;
	const parts = value.split(`; user_id=`);
	if (parts.length === 2) {
		return parts.pop().splite(",").shift();
	}
}
function loadUserData() {
	const cookie = getCookie;
	// load data using the cookie
}
const userData = loadUserData();

인수(argument)의 가장 좋은 숫자는 3개 혹은 그 이하

❌ Don’t

1
2
3
4
5
function makePayment(price, productId, size, quantity, userId) {
	// process payment
}

makePayment(35, 5, "xl", 2, "니꼬")

⭕️ Do

1
2
3
4
5
6
7
8
9
10
11
12
// 한개의 configuration object를 보내기
function makePayment({ price, productId, size, quantity, userId }) {
	// process payment
}

makePayment({
	price: 35,
	productId: 5,
	size: "xl",
	quantity: 2,
	userID: "니꼬"
});

boolean 값을 인수로 함수에 보내는 것을 최대한 방지

❌ Don’t

1
2
3
4
5
6
7
8
9
10
11
12
function sendMessage(text, isPrivate) {
	if(isPrivate) {
		// send private message
	} else {
		// send public message
	}
}

sendMessage("hello", false)
sendMessage("this is a secret", true)

//  if-else 값을 다른 함수로 분리 하는 것이 좋다

⭕️ Do

1
2
3
4
5
6
7
8
9
function sendPrivateMessage(text) {
		// ...
}
function sendPublicMessage(text) {
		// ...
}

sendPrivateMessage("hello")
sendPublicMessage("this is a secret")

짧은 변수명이나(아무도 이해하지 못하는) 축약어 사용 피하기

❌ Don’t

1
2
3
4
allUsers.forEach((u, i) => {
	sendEmail(u);
	addToCount(i);
});

⭕️ Do

1
2
3
4
allUsers.forEach((user, currentNumber) => {
	sendEmail(user);
	addToCount(currentNumber);
});

** 작업 순서: 일단 코드 먼저 작성 → 클린코드로 만들기**

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

클린코드 목요일날 검색했었는데 같은 내용이 책에 있었다!! 오호오호 반가워~

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

Reference

IT 5분 잡학 사전

bubble sort

버블 정렬 참고 링크

선택 정렬 참고 링크

삽입 정렬 참고 링크

This post is licensed under CC BY 4.0 by the author.

IT 5분 잡학 사전 5

IT 5분 잡학 사전 7

Comments powered by Disqus.