TIL 날짜
2023. 02. 28
오늘 읽은 범위
에피소드 35: 비밀번호는 어떻게 저장될까?
에피소드 36 - 37: 객체 지향 프로그래밍이 뭐죠?
에피소드 38: 함수형 프로그래밍이 뭐죠?
책에서 기억하고 싶은 내용을 써보세요.
비밀번호 시스템을 구현할 때 해시 함수 를 사용한다.
해시 함수
: 비밀번호를 무작위 값으로 변환 해시 함수는 완벽하지 않고 레인보우 테이블의 공격에 취약하다. 그런 이유에서 솔트(Salt)를 사용해서 보안을 강화 한다.
레인보우 테이블
솔트(Salt)
프로그래밍 패러다임 : 프로그래머가 프로그래밍을 할 때의 관점, 방식
- 명령형 프로그래밍
: 결과 값에 어떻게 도달하는지 선언한다. 개발자가 실수하기 쉽고, 동료들이 이해하는데 어려움이 있다.
- 선언형 프로그래밍
: 결과 값을 선언한다, 결과 중심의 코드 작성
// 명령형 프로그래밍
function spaceToStar(text){
let result = "";
for (let i = 0; i < text.length; i++){
if(text[i] === " "){
result += "*"
}else {
result += text[i]
}
}
return result
}
// 선언형 프로그래밍
function spaceToStar(text){
return text.replaceAll(" ", "*")
}
객체 지향 프로그래밍 : 클래스와 상속이라는 대표적 특징을 가지고 있다.
// 특징 : 클래스와 상속
class Human {
constructor(name){
this.name = name;
this.arms = 2;
this.legs = 2;
}
}
// 클래스 상속을 통해 코드의 간결성 확보
class Baby extends Human{
constructor(name){
super(name)
this.cute = true;
}
cry(){
return 'waa waa'
}
}
함수형 프로그래밍 : 버그가 발생하기 어려운 구조
함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 방식을 유지한다.
function checkForOdd(item){
return item % 2 === 0;
}
function removeOdd(items){
return items.filter(checkForOdd);
}
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
기술 면접에서 bcrpyt 암호화에 대한 질문을 받은 적이 있다. 개념을 알고 있었지만 나의 언어로 쉽게 설명하지 못해 아쉬웠었다. 오늘 해당 내용을 읽으면서 어떻게 비유하고 설명하면 좋을지 아이디어를 얻게 된것 같다✨
그리고 함수형 프로그래밍 사용에 익숙한 개발자가 되고 싶다. 그렇게 하기 위해서는 명령형 기반에 만들어지는 선언형 프로그래밍에 익숙해져야겠지?