TIL(2023. 10. 17)
DAY8
📖 오늘 읽은 부분 : 에피소드 35 ~ 에피소드 38
💡
에피소드 35 비밀번호는 어떻게 저장될까?
괜찮은 비밀번호 시스템의 예: 해시 함수
예를 들어 비밀번호 : 12345 -> 해시함수 : !aef3eZ&^ 같은 값을 만들어 저장
해시 함수 동작
규칙1. 동일한 임력값에 대해 동일한 출력값을 가진다.
일대일 대응 관계는 계숙 유지된다.
규칙2. 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다.
규칙3. 반대로 입력한다고 해서 원래 값이 나오지 않는다.
레인보우 테이블(rainbow table)
해시 함수가 변경한 값을 원래의 값과 연결한 표.
솔트(salt)
비밀번호를 무작위 텍스트인 솔트와 합쳐서 해시 함수에 통과시켜준다.
에피소드 36 객체 지향 프로그래밍이 뭐죠? 1️⃣
프로그래밍 패러다임(programming paradigm)
프로그래머가 프로그래밍을 할 때의 관점, 방식 이런 것을 말한다. 즉, 프로그래밍을 하는 사고의 틀.
: 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 등
<유명인 대전>이라는 게임을 만든다고 상상했을 때,
플레이어는
플레이어 이름: 빌게이츠
체력 : 85
스킬 : 프로그래머
const player = {
name: "Bill Gates",
health: 85,
skill: "Programmers",
};
여러명의 플레이어가 있을 때 => 클래스 이용
class Player {
constructor(name, health, skill) {
this.name = name;
this.health = health;
this.skill = skill;
this.xp = 0;
}
}
const bill = new Player ("Bill Gates", 85, "Programmer")
const elon = new Player ("Elon Musk", 90, "Tesla")
효율적이게 코드를 짤 수 있다.
에피소드 37 객체 지향 프로그래밍이 뭐죠? 2️⃣
class Human {
constructor(name) {
this.name = name;
this.arms = 2;
this.legs = 2;
}
}
class Teenager {
constructor(name) {
this.name = name;
this.arms = 2;
this.legs = 2;
this.emotional = true;
}
curse() {
return `%^#$@#%`;
}
}
class Baby {
constructor(name) {
this.name = name;
this.arms = 2;
this.legs = 2;
this.cute = true;
}
cry() {
return 'waa waa';
}
}
똑같은 부분은 상속 가능할 수 있다.
class Teenager extends Human {
constructor(name) {
this.emotional = true;
}
curse() {
return `%^#$@#%`;
}
}
class Baby extends Human {
constructor(name) {
this.cute = true;
}
cry() {
return 'waa waa';
}
}
이렇게 하면 상속 가능하다.!
에피소드 38 함수형 프로그래밍이 뭐죠?
=> 자바, 자바스크립트, 파이썬 등..
'버그가 발생하기 어려운 구조' => 개발자에게 유용하다.
선언형, 명령형 프로그래밍의 차이
선언형 프로그래밍 : 원하는 결과값을 선언한다. What
CSS
명령형 프로그래밍 : 원하는 결과값에 어떻게 도달하는지 선언한다. How
텍스트에서 공백을 ♥️로 바꾸는 코드
function spaceToHeart(text) {
let result = '';
for( let i = 0; i < text.length; i++ ) {
if( text[i] === ' ' ) {
result +="♥️";
} else {
result += text[i];
}
}
retrun result;
}
명령형 프로그래밍
function spaceToHeart(text) {
return text.replaceAll(" ", "♥️");
}
선언형 프로그래밍
차이
명령형 프로그래밍은 세세히 지시할 수 있는 대신 개발자가 실수하기 쉽고, 내가 작성한 코드를 다른 사람이 이해하기 어려울 수 있다. 반면 선언형 프로그래밍은 결과 중심으로 코드를 작성하니 실수도 적고, 다른 사람이 코드를 이해하기도 쉽다.
functions checkForOdd(item) {
return item % 2 === 0;
}
funtion removeOdd(items) {
return item.filter(checkForOdd);
}
함수형 프로그래밍은 함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지한다.
🐣 느낀 점
비밀번호는 데이터베이스에 저장해서 꺼내와서 일치하는지 비교하는줄 알았다. 근데 상식적으로도 잘못된 생각이라니.. 너무 짧게만 생각한 것 같다. 해시 함수를 통해서 다른 값으로 저장해주고 레인보우 테이블로 원래의 값을 저장해두고 솔트라는 텍스트로 보안까지 생각해서 저장한다니 생각보다 안전하게 저장하는 것 같다.
'IT > IT 5분 잡학사전' 카테고리의 다른 글
[Nomad Coders] IT 5분 잡학사전 #10 (2) | 2023.10.18 |
---|---|
[Nomad Coders] IT 5분 잡학사전 #08 (1) | 2023.10.15 |
[Nomad Coders] IT 5분 잡학사전 #07 (2) | 2023.10.14 |
[Nomad Coders] IT 5분 잡학사전 #06 (0) | 2023.10.12 |
[Nomad Coders] IT 5분 잡학사전 #05 (0) | 2023.10.11 |