[북클럽 챌린지] DAY 12
2023-01-247 min read
DAY 12
🔖 오늘 읽은 범위 : 에피소드 35 ~ 38
- 비밀번호는 어떻게 저장될까?
- 객체 지향 프로그래밍이 뭐죠? (1)
- 객체 지향 프로그래밍이 뭐죠? (2)
- 함수형 프로그래밍이 뭐죠?
😃 기억하고 싶은 내용
-
괜찮은 비밀번호 시스템의 예: 해시함수
내가 입력한 값을 무작위 값으로 둔갑시켜주는 녀석이야.- 규칙 1. 동일한 입력값에 대해 동일한 출력값을 가진다. (12345 → !aef3zed&^)
- 규칙 2. 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다.
- 규칙 3. 반대로 입력한다고 해서 원래 값이 나오지 않는다.
-
해시함수도 완벽하진 않다! 레인보우 테이블
사실 해시함수를 통과한 값은 레인보우 테이블에서 찾아보면 원래 값을 알 수 있어. -
최종병기 솔트
12345와 같은 비밀번호를 무작위 텍스트인 솔트와 합쳐서 해시함수에 통과시키는 거야. 그러면 레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없을거야! -
객체 지향 프로그래밍 - 코드의 효율성을 UP
-
프로그래밍 패러다임 : 절차 지향 프로그래밍 / 객체 지향 프로그래밍 / 함수형 프로그래밍
→ 프로그래머가 프로그래밍을 할 때의 관점, 방식 이런 것을 말하고 프로그래밍을 하는 사고의 틀이라고 생각해도 좋아. -
class : 쉽게 말해 우리가 재료만 공장에 넣어주면 나머지 코드는 공장이 알아서 찍는거야.
새 속성을 부여할 때는 공장에 알려주기만 하면 되는거지. 바로 이런 자연스런 생각이 객체 지향 프로그래민의 클래스(class)라는 개념이야.// 플레이어의 공장, 클래스 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');
-
extends : 가지고 있는 class A를 다른 class B에 상속을 시키면 class A의 기본 속성은 다 가지면서 class B 자신만의 속성을 추가할 수 있어.
class Human { constructor(name) { this.name = name; this.arms = 2; this.legs = 2; } } class Teenager extends Human { constructor(name) { this.emotional = true; } curse() { return '%^@!%#!#$'; } } class Baby extends Human { constructor(name) { this.cute = true; } cry() { return 'waa waa'; } }
-
-
함수형 프로그래밍
-
배워야하는 이유 → 버그가 발생하기 어려운 구조
-
선언형 프로그래밍과 명령형 프로그래밍의 차이
선언형 프로그래밍 명령형 프로그래밍 원하는 결괏값을 선언한다. 원하는 결괏값에 어떻게 도달하는지 명령한다. 결과 중심으로 코드를 작성하니 실수도 적고, 동료가 코드를 이해하기도 쉽다. 할일을 세세하게 지시할 수 있는 대신 개발자가 실수하기 쉽고, 작성한 코드를 동료가 이해하기 어렵다는 특징이 있다. // 선언형 프로그래밍 function spaceToHeart(text) { return text.replaceAll(’ ’, ‘❤️’); } // 명령형 프로그래밍 function spaceToHeart(text) { let result = “”; for(let i=0; i < text.length; i++) { if(text[i] === ‘ ‘) { result += ‘❤️’; } else { result += text[i]; } } }
-
함수형 프로그래밍
함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지해.function checkForOdd(item) { return item % 2 === 0; } function removeOdd(items) { return items.filter(checkForOdd); } // checkForOdd 라는 함수를 인자로 보냈다.
-
🤔 오늘의 파트에 대한 소감
- 이름만 들으면 어려울 것 같은 객체 지향 프로그래밍을 살짝 이해할 수 있었다! 공장처럼 찍어낼 수 있는 class 개념과 class를 그대로 가져갈 수 있는 상속 개념처럼 어디선가 많이 봤던 코드를 조금이나마 알아볼 수있다고 생각하니 기쁘다.
- 선언형과 명령형 프로그래밍 패러다임의 특징을 구분할 수 있게 되었고, 내가 써왔던 코드가 함수형 프로그래밍이었다는 사실도 알게 되었다.
🔎 추가로 알게 된 것
(책 내용 +알파로 궁금한 것, 이해가 가지 않는 것 등)
- 프론트엔드를 공부하며 자바스크립트에서는 객체지향프로그래밍을 어떻게 하는지 검색해봤다.
자바스크립트에서 객체지향을 하는 게 맞나요? | 요즘IT
🤟소감 3줄 요약
- 비밀번호는 해시함수를 이용해 솔트를 팍팍쳐야 안전하다.
- 객체지향 프로그래밍, 선언형 프로그래밍, 명령형 프로그래밍, 함수형 프로그래밍의 특징을 말할 수 있다.
- 공장처럼 찍어낼 수 있는
class
잘 기억해두겠다.