# [노개북] It 5분 잡학사전#9 - ep. 35~38

## 📌 오늘 TIL 3줄 요약

* 비밀번호는 해시 함수, 솔트를 통해 되돌릴 수 없는 랜덤 문자열로 저장
    
* 함수형 프로그래밍은 결과 중심의 선언으로 실수를 줄이고 가독성을 높임
    
* 함수형 프로그래밍은 명령형 프로그래밍 위에 쓴다고 할 수 있음
    

## 📆 TIL (Today I Learned) 날짜

2023-12-19

## 📚 오늘 읽은 범위

에피소드 35~38

## 📝 책에서 기억하고 싶은 내용

### 에피소드 35 비밀번호는 어떻게 저장될까?

* 비밀번호를 데이터베이스에 그대로 저장하면 운영자, 개발자가 접근하여 볼 수 있어서 안됨
    
* 해시 함수를 사용해서 입력 받은 값을 무작위 값으로 변화시켜서 저장해야 함
    
    * 해시 함수는 동일한 입력값에 대해 동일한 출력값을 가짐
        
    * 입력값이 살짝만 바뀌어도 출력값은 완전히 바뀜
        
    * 출력값을 입력한다고 해도 입력값으로 복원할 수가 없음
        
* 해시 함수의 취약점 - 레인보우 테이블
    
    * 입력, 출력 쌍이 저장되어 있는 테이블
        
    * 레인보우 테이블이 있으면 비밀번호를 복원해서 볼 수 있음
        
* 솔트
    
    * 아주 작은 무작위 텍스트를 비밀번호에 추가하여 해시 테이블에 통과시킴
        
    * 레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없게됨
        

### 에피소드 36~37 객체 지향 프로그래밍이 뭐죠?

* 프로그래밍 패러다임은 프로그래밍할 때의 관점, 방식을 말함
    
    * 객체 지향 프로그래밍
        
    * 함수형 프로그래밍
        
    * 절차 지향 프로그래밍
        
* 하나의 언어가 여러가지 프로그래밍 패러다임을 지원하기도 함
    
    * Java는 객체 지향 프로그래밍과 함수형 프로그래밍을 지원함
        
* 클래스
    
    * 공통된 속성을 가지고 있지만 데이터는 다른 객체들을 생산하는 공장 같은 역할
        
    * ![[Pasted image 20231220015746.png]]( align="left")
        
* 상속을 통해서 클래스의 속성, 함수 등을 자식 클래스에게 물려줄 수 있음
    

### 에피소드 38 함수형 프로그래밍이 뭐죠?

* 객체 지향 프로그래밍과 마찬가지로 프로그래밍 패러다임 중 하나
    
* 함수형 프로그래밍은 '버그가 발생하기 어려운 구조'여서 개발자에게 매우 유용함
    

#### 샌드위치 만들기 예시로 보는 선언형, 명령형 프로그래밍

* 선언형 프로그래밍에서는 'BLT 샌드위치를 만들어줘!'하고 **원하는 결과값을 선언**함
    
* 명령형 프로그래밍에서는 **결과값에 어떻게 도달하는지 선언**함
    
    1. 토스트 빵 2개를 꺼내서 구워라
        
    2. 양상추 2~3장을 씻고, 토마토를 얇게 썰어서 2조각 준비하라 (...)
        
    3. (1)의 토스트 빵 1개 위에 (2)의 재료를 쌓은 다음, 나머지 토스트 빵 1개로 덮어라.
        
* 대표적인 선언형 프로그래밍으로는 CSS가 있다.
    
    * 배경색을 바꿀 때 바꿀 배경색을 선언하지 바꾸는 방법을 선언하지 않는다.
        

#### 자바스크립트로 보는 선연형, 명령형 프로그래밍

* 명령형 프로그래밍에서는 비교하는 방법, 교체하는 방법까지 자세히 선언
    
    * 세세하게 컨트롤할 수 있지만 실수가 발생하기 쉬움
        
    * 작성한 코드를 동료가 이해하기 어려울 수 있음
        
* 선언형 프로그래밍에서는 `replaceAll` 함수 호출
    
    * `replaceAll`은 어딘가에 명령형 프로그래밍으로 작성되어 있음
        
    * 선언형 프로그래밍은 명령형 프로그래밍 위에 쓴다고 말할 수 있음
        
    * 결과 중심으로 코드를 작성하니 실수도 적고, 동료가 이해하기도 쉬움
        
        ![[Pasted image 20231220020842.png]]( align="left")
        

## 보너스 - 개발자 번아웃 대처법

1. 휴식 시간 갖기 - 컴퓨터에서 잠깐 멀어져서 휴식을 취해볼 필요가 있음
    
2. 일하는 시간 제한하기 - 컴퓨터만 있으면 일할 수 있으니까 일과 삶의 경계가 모호
    
3. 몸을 움직이고 건강한 음식으로 활력 찾기
    

## 😀 오늘 읽은 소감 및 떠오르는 생각

* 함수형 프로그래밍이 왜 유용한지 정말 간단하게 잘 설명한 것 같아서 굉장히 재밌게 읽었다. 짧은 글이었지만 여러가지 유익한 내용들이 많이 담긴 것 같아서 가볍지만 재밌게 읽을 수 있는 것 같다.
    
* 개발자 번아웃 대처법에서 일하는 시간을 제한하는 방법에 대해서 너무 공감이 갔다. 노트북 분리불안이 살짝 있는 것 같은데 일하는 시간을 제한함으로써 이 문제도 어느 정도 해결이 될 것 같다. 또 실제로 일하는 시간이 제한되어 있어야지 더 집중해서 빠르게 끝낼 수 있는 것 같다.
