2023.01.24
비밀번호 시스템 구현
But, 해시함수의 레인보우 테이블 : 입력값과 출력값을 연결한 테이블 -> 해킹위험
=> 솔트 (아주 짧은 무작위 텍스트) 를 붙여서 해시함수에 통과시켜서 출력값을 얻음
* 프로그래밍 패러다임 (programming paradigm)
프로그래머가 프로그래밍을 할때의 관점, 방식, 사고방식
절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍
객체 지향 프로그래밍
const player_1 = {
name: "Tony Stark",
health: 80,
skill: "IronMan",
};
const player_2 = {
name: "Steve Rogers",
health: 100,
skill: "Captin America",
};
const player_3 = {
name: "Peter Parker",
health: 95,
skill: "SpiderMan",
};
-> 중복이 계속되어 비효율적이고 오타를 낼 수도 있음 => class 선언
class Player {
constructor(name, health, skill) {
this.name = name;
this.health = health;
this.skill = skill;
this.xp = 0; //기본값이 0
}
}
const tony = new Player("Tony Stark", 80, "IronMan");
const steve = new Player("Steve Rogers", 100, "Captin America")
const peter = new Player("Peter Parker", 95, "SpiderMan")
class Human {
constuctor(name){
this.name = name;
this.arms = 2;
this.legs = 2;
}
}
class Teenager {
constuctor(name){
this.name = name;
this.arms = 2;
this.legs = 2;
this.emotional = true;
}
curse() {
return `(-_-)`;
}
}
class Baby {
constuctor(name){
this.name = name;
this.arms = 2;
this.legs = 2;
this.cute = true;
}
cry() {
return `crying`;
}
}
중복됨 => 상속
class Human {
constuctor(name){
this.name = name;
this.arms = 2;
this.legs = 2;
}
}
class Teenager extends Human {
constuctor(name){
this.emotional = true;
}
curse() {
return `(-_-)`;
}
}
class Baby extends Human {
constuctor(name){
this.cute = true;
}
cry() {
return `crying`;
}
}
버그가 발생하기 어려운 구조
자바, 자바스크립트, 파이썬 등이 함수형 프로그래밍을 지원함
선언형 프로그래밍 = 원하는 결과값만 선언
ex) CSS
-> 결과 중심이므로 실수가 적고 이해하기 쉬움
명령형 프로그래밍 = 원하는 결과값에 어떻게 도달하는지 선언 ( 단계를 알려줌 )
-> 할일을 세세하게 지시할 수 있으나 개발자가 실수 하기 쉽고, 다른 개발자가 이해하기 어려울 수 있음
함수형 프로그래밍
함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍의 콘셉트를 유지함