IT 관련/📖독서

📖 IT 5분 잡학사전(Ep. 26~29)

달싹이 2024. 8. 4. 04:42
728x90
반응형

오늘 TIL 3줄 요약

  • 정렬 알고리즘
  • 자료구조(스택, 큐, 해시테이블)
  • 클린코드 꿀팁 5가지!

TIL (Today I Learned) 날짜

2024.08.03

오늘 읽은 범위

  • Ep.26 정렬 알고리즘이 뭐죠?
  • Ep.27 스택, 큐가 뭐죠?
  • Ep.28 해시 테이블이 뭐죠?
  • Ep.29 개발자 필수 소양, 클린 코드!

책에서 기억하고 싶은 내용

클린코드는 생각보다 중요했다!


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

버블 정렬 (Bubble Sort)

  • 시간 복잡도:
    • 최악: O(n^2)
    • 평균: O(n^2)
    • 최선: O(n) ( 이미 정렬된 경우, 하지만 여전히 모든 요소를 비교)
  • 설명: 인접한 두 요소를 비교하여 필요시 교환하는 과정을 반복하며 정렬함.                                                                대부분의 경우, 모든 요소를 여러 번 반복하여 비교해야 하기 때문에 최악의 경우 O(n^2)의 시간 복잡도를 가짐.

선택 정렬 (Selection Soft)

  • 시간 복잡도:
    • 최악: O(n^2)
    • 평균: O(n^2)
    • 최선: O(n^2) (항상 일정한 비교를 수행)
    • 설명: 배열을 순차적으로 탐색하면서 현재 위치에 맞는 최솟값(또는 최댓값)을 선택하여 해당 위치에 삽입함.     항상 n^2에 가까운 비교를 해야 하므로 최선의 경우와 최악의 경우가 같음.

삽입 정렬 ( Insertion Sort)

  • 시간 복잡도:
    • 최악: O(n^2)
    • 평균: O(n^2)
    • 최선: O(n) (이미 정렬된 경우)
  • 설명: 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 요소를 정렬된 부분에 적절히 삽입하여 정렬함. 데이터가 거의 정렬되어 있을 경우 효율적으로 동작하여 O(n)의 시간 복잡도를 가짐.

 

모두 빅-O 표기법으로 시간복잡도가 O(N^2)이지만 실제 속도는 차이가 난다.

 

  • 최악의 경우: 모든 알고리즘이 O(n^2)의 시간 복잡도를 가지며, 대략적인 성능은 유사하다.
  • 평균적인 경우: 대체로 비슷한 성능을 보이지만, 데이터의 성격에 따라 다소 차이가 있을 수 있다.
  • 최선의 경우: 삽입 정렬이 이미 정렬된 데이터에 대해서는 가장 빠르게 동작하며, 시간 복잡도가 O(n)이므로 다른 두 알고리즘보다 효율적이다.

 

만약 초기 데이터 상태가 정렬된 상태라면 삽입 정렬 > 버블정렬, 선택정렬이 된다.

 

이처럼 시간 복잡도초기 데이터 상태에 따라서 속도 차이가 추가적으로 날 수 있다.

Ep.27 스택, 큐가 뭐죠?

자료구조의 하나인 스택과 큐가 있다.

스택(Stack) - FILO, LIFO : 마치 박스에 넣듯 밑에서부터 위로 하나씩 데이터를 쌓아 저장하기에 가장 마지막에 들어간 맨 위의 데이터를 가장 먼저 꺼내게 된다.

 

큐(Queue) - FIFO, LILO : 마치 터널을 통과하듯 가장 먼저 들어간 데이터가 가장 먼저 나가게 된다.

Ep.28 해시 테이블이 뭐죠?

해시 테이블은 '키''값'을 짝지어 모은 자료구조이다.

사전에 비유할 수 있는데, 키는 사전에서 단어, 값은 단어의 뜻을 말한다.

 

기존 배열에서는 원하는 값을 찾으려면 모두 검색하는 선형 검색을 하였기에 오래 걸리지만 해시 테이블을 사용하면 원하는 키를 찾으면 바로 값이 나오기 때문에 속도를 높일 수 있다!

// 기존 배열
menu = [
{ name: "아메리카노", price: 10 },
{ name: "라떼", price: 12 },
{ name: "캐모마일차", price: 15},
];

// 해시 테이블 사용
menu = {
    커피: 10,
    라떼: 12,
    캐모마일차: 15
};

 

(해시 테이블은 라떼의 가격을 알고 싶으면 '라떼'를 검색하면 된다.)

 

해시 테이블 응용하기

// 기존 배열 사용
countries = ["대한민국", "미국", "스페인", "포르투", "호주"]


// 해시 테이블 사용
countries = {
    "대한민국": true,
    "미국": true,
    "스페인": true,
    "포르투": true,
    "호주": true,
 }

(대한민국을 찾고 싶어 검색하면 true가 나오면 있는 것, 없으면 true가 안나옴)

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

개발자라면 필독 도서로 알려져 있는 <<클린 코드>>에 대한 꿀팁 5가지를 소개한다.

클린 코드는 설명이 필요 없는 코드를 말한다.

즉, 코드를 읽기만 해도 코드가 하는 일, 의미하는 바를 파악 가능하여 따로 물어 볼 필요가 없다는 것이다.

 

개발자는 팀원들과 협력하여 코드를 짜게 되는 경우가 많기도 하고, 자신의 옛날 코드를 볼 일이 있을 때도 그렇고 따로 설명된 문서를 읽고 이해하며 코드를 볼 필요 없이 코드만 보고도 바로 실행하며 이해가 되는 코드, '클린 코드'를 짜는 것은 아주 중요한 일이다.

 

클린 코드 꿀팁 5가지

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

setInterval(eatKimchi, 86400);

만약 이런 코드가 있다면 86400의 값이 무엇을 의미하는지 코드로는 알 수가 없다.

다음과 같이 바꾼다면 클린 코드가 된다.

const SECONDS_IN_A_DAY = 86400; // 하루를 초로 바꾼 값
setInterval(eatKimchi, SECONDS_IN_A_DAY);

이렇게 변수 이름을 의미있게 만들어 상수로 관리하면 굳이 하루를 초로 바꾼 값이라고 메모를 남길 필요가 없어진다.

 

2. 함수 이름은 가급적 동사로 지어라

함수는 주로 특정 동작이나 작업을 수행하므로, 함수 이름을 동사로 짓는 것이 좋다.

만약 다음과 같은 코드가 있다면 이 함수로 어떤 동작을 수행하는지 잘 모를 수 있다.

function userData(){}

그래서 다음과 같이 동사로 바꿔준다면

function loadUserData(){}

"아, 실제로는 사용자 데이터를 불러오는 함수이구나!" 하고 바로 알 수 있다.

 

그리고 이렇게 이름지으면 이 함수에서 불필요하게 많은 동작을 하고 있는지 파악하기도 쉬워져서 함수의 기능을 더 명확하게 구별지어 만들 수 있어진다.

함수는 1개의 역할만 수행하는게 좋기 때문이다.

 

함수를 설계할 때 이제는 이름을 동사로 만들고, 1개의 역할만을 수행하게 만들어 하는 일을 명확히 하자!

 

3. 매개변수는 너무 많이 쓰지 마라!

함수에 값을 전달하기 위해서 매개변수를 사용하는데, 너무 많은 매개변수를 사용하면 함수는 더 복잡해 질 뿐더러 각 변수가 의미하는 바를 파악하기도 많으니 골치아파진다.

 

적당히 3개 이내로 쓰는게 좋지만 정 어쩔 수 없다면 형식이라도 조금 더 정리하여 알아보기 편하게 바꾸는게 좋다.

이럴 때 쓸 수 있는게 컨피규레이션 오브젝트 방식으로 매개변수를 묶어서 전달하는 방식이다.

 

컨피규레이션 오브젝트 방식은 소프트웨어 개발에서 설정(configuration) 정보를 객체(object) 형태로 관리하는 방법이다.

function makePayment(price, productId, size, quantity, userId){}

makePayment(35, 5, "xl", 2, "Dalssak")

위와 같은 JavaScript 코드에서 적용한다면 다음과 같이 작성할 수 있다.

function makePayment({price, productId, size, quantity, userId}){}

makePayment({
	price: 35,
    productId: 5,
    size: "xl",
    quantity 2,
    userId "Dalssak",
    })

 

4. 불린값을 인자로 보내지 마라!

function sendMessage(text, isPrivate){
	if(isPrivate){
    	(생략...)
        }
        else{
        (생략...)
        }
    }
}

위와 같은 코드에서 불린값을 인자로 넘겨 if문에서 분기로 사용하였는데 그렇다는건 이 함수에서 분기에 따라 2가지 일을 처리한다는 의미이다. 따라서 1가지 역할을 하는게 좋은 함수 입장에서는 불린값은 사용하지 않는게 유리하다!

 

5. 축약어를 쓰지 마라

나 혼자만 알아볼 수 있는 이상한 축약어를 사용하지 말자! 

예를 들어 email을 e로 사용하거나 user를 u로 사용하면 다른 사람도 미래의 자신도 알아보기 힘들 것이다.

 

이렇게 5가지를 알아봤다.

우리가 코딩을 할 때는 창의력이 넘치므로 막 코드를 짜게 되는데 누구나 처음부터 클린한 코드를 짜게끔 습관들여지기가 힘드니 첨에는 클린코드를 짜지 못해도 괜찮다. 대신 다 짜고 클린코드로 다듬으면 된다!

마지막으로 클린코드의 장단점을 알아보겠다.

클린코드의 장단점

장점

  • 재사용성: 설정 데이터를 여러 모듈에서 재사용할 수 있어, 코드의 일관성을 유지하고 중복을 줄일 수 있다.
  • 유연한 변경: 설정 파일을 통해 애플리케이션 동작을 쉽게 변경할 수 있어, 코드의 수정 없이도 다양한 환경에 적응할 수 있다.
  • 환경 설정 관리: 개발, 테스트, 프로덕션 환경에 따라 다른 설정을 쉽게 관리할 수 있다.

단점

  • 복잡성 증가: 설정이 많아질수록 복잡해질 수 있으며, 잘못된 설정이 오류를 유발할 수 있다.
  • 런타임 의존성: 설정을 잘못 사용하면 런타임 에러가 발생할 수 있으므로, 설정 사용 시 주의가 필요하다.

오늘 읽은 소감은?

알고리즘과 자료구조를 들어가면서부터 이거 정리를 다 하면서 가려니까 속도가 도저히 안붙는다 ㅎㅎ

일단 최대한 정리를 간단히 하고 나서 부분적으로 내용을 추가하는 방법을 써야겠다.

이번에 열심히 정리하면서 알고리즘과 자료구조를 확실히 이해하고 좋은 코드를 짤 수 있는 실력을 갖춰야겠다!

힘들긴 한데 기대가 되는군!

번외: 내가 번아웃을 극복하는 방법은?

사실 번아웃이라는건 열심히 했을때도, 아닐때도 시도때도 없이 자주 찾아오는데...

나는 일단 좋아하는 노래를 들으며 운동을 하거나 취미로 무언가를 만들어 보면서 잠시 여유를 가졌다가 다시 한다.

그 외에는 마음 다잡고 집중해서 또 하는 방법밖에 없는 것 같다.

우리 모두 각자의 세상에서 지치고 힘든 외로운 싸움을 이어나가지만 열심히 하고 나서는 후회도 없고 누군가가 알아줄 때 뿌듯함도 느끼기에 계속 나아갈 수 있는게 아닐까? 역시 사람은 이어져야돼~ 암

다들 파이팅!

 

 

반응형