본문 바로가기
IT지식/노개북 스터디

[노개북 스터디] 12일차_2023/02/28

by 율✌️ 2023. 3. 1.
[오늘의 과제]
✅ 에피소드 35~38 까지 읽기
✅ TIL 작성하기

 

📝 오늘의 TIL 📝 

 

✔️  책에서 기억하고 싶은 내용들  정리    

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

- 비밀번호 시스템

   [잘못된예 ❌]
    1.  데이터베이스에 그대로 저장 : 개발자가 비밀번호 다 볼 수 있음
    2. 데이터베이스 자체를 암호화하여 제공받은 키로 로그인: 키를 잃어버리면 끝

   [괜찮은예 ✅]
    1. 해시함수사용 : 해시함수에 통과시켜 얻은 출력값을 데이터베이스에 저장. 
        BUT!!  '레인보우테이블' 이라는것 때문에 완벽하지는 않다. (입력값, 출력값을 연결한 표)
                     레인보우테이블이 털리면 끝.

   2. 👍BEST 솔트와 입력값을 합침 : 비밀번호와 솔트를 합쳐서 해시함수에 통과시킨다.
                                                            레인보우 테이블이 있어도  원래 입력값을 찾을 수 없다.
                                        

    👀 해시함수란? 
     > 사용자의 입력값을 데이터베이스에 들어가기전 무작위값으로 변환시켜주는 함수.
     > 동일한 입력값에는 동일한 값을 출력
     > 입력값이 아주 조금만 달라도 완전 다른 출력값이 나옴
     > 한방향으로 설계되어 해시 값을 넣는다고 다시 입력값을 볼 수 있는것이 아님


    👀 솔트란? 
     > 아주 조그마한 무작위 텍스트 





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

프로그래밍 패러다임 중 하나로 속성은 같지만 값이 다른 데이터들을 위한 공장. 

[같은 속성에 다른 값을 가진데이터들 😱]
- 휴먼에러로 속성에 오타가 날수도
- 속성을 추가해주고 싶으면 모든 데이터에 하나하나 다 추가해주어야함.

const player ={
	name: 'A',
    	health: 105,
   	skill: 'talking'}

const player1 ={
	name: 'B',
    	health: 125,
    	skill: 'eating'}

const player2 ={
	name: 'C',
    	health: 135,
    	skill: 'sleeping'}

 

[객체지향 프로그래밍 😍]
- 원하는 값만 넣어주면 똑같은 객체를 찍어낸다.

- 초기값을 모두 똑같이 설정해 줄 수 있다.

// 아래와 같이 공장을 만들어두고
class Player {
	constructor(name,health,skill){
    	this.name = name;
        this.health = health;
        this.skill=skill;
        this.xp=0}}

// 값만 넣어준다
const player = new Player('A',105,'talking')
const player = new Player('B',125,'eating')
const player = new Player('C',135,'sleeping')

 





에피소드 37:객체지향 프로그래밍의 상속?


[같은 속성이 있지만 추가기능이 있는 class들 😱]
- 중복되는 속성이 있지만 기능이 다르기 때문에 여러번 같은 속성을 써주어야한다. 

class human {
  constructor(name, health, skill) {
    this.name = name;
    this.health = health;
    this.skill = skill;
  }
}

// 감정적이고 욕하는 기능이 추가됨

class Teenager {
  constructor(name, health, skill) {
    this.name = name;
    this.health = health;
    this.skill = skill;
    this.emotional = true;
  }
  curse() {
    return 'dd#!ri3o1fe';
  }
}

// 귀여움과 우는 기능이 추가됨
class Baby {
  constructor(name, health, skill) {
    this.name = name;
    this.health = health;
    this.skill = skill;
    this.cute = true;
  }
  cry() {
    return 'TTTTTT';
  }
}

 

[상속의 등장으로 해결 😍]
-
기본이 되는 class를 나머지 class에 상속 시킨다. 
- 기본 속성들은 모두 상속 받았으니 추가된 속성만 써주면 된다.

class human {
  constructor(name, health, skill) {
    this.name = name;
    this.health = health;
    this.skill = skill;
  }
}

// 감정적이고 욕하는 기능이 추가됨

class Teenager extends Human {
  constructor(name, health, skill) {
    this.emotional = true;
  }
  curse() {
    return 'dd#!ri3o1fe';
  }
}

// 귀여움과 우는 기능이 추가됨
class Baby extends Human {
  constructor(name, health, skill) {
    this.cute = true;
  }
  cry() {
    return 'TTTTTT';
  }
}

 

 

 

 

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

프로그래밍 패러다임 중 하나로 '버그가 발생하기 어려운 구조'라서 개발자에게 아주 유용하다.
선언형과 명령현 프로그래밍에 해당. 
자바, 자바스크립트, 파이썬 등에서 지원.

 


      👀 프로그래밍 패러다임란? 
     > 프로그래머가 프로그래밍을 할 때의 관점, 방식 ( = 어떻게 사고하는지)
     > 프로그래밍 언어는 프로그래밍 패러다임을 하나 이상 지원함 (절차지향, 객체지향, 함수형 등)
     > 선언형 , 명령형 프로그래밍이 있다.

         [선언형과 명령형의 차이]
          

          선언형: 원하는 결괏값을 선언 (e.g css)
                      => BLT 샌드위치를 만들어줘!

          명령형: 결괏값에 도달하는 방법을 선언

                      => 토스트빵 두개를 구워, 그다음 양상추를 씻어 그다음 토마토를 씻어, 그다음~~~~~~~~

          선언형: 실수가 적고 동료가 코드를 이해하기 쉬움

          명령형: 할일을 세세하게 지시할 수 있지만 실수하기 쉽고 동료가 한눈에 알아보기 힘들다

   



          >>> 코드차이>>> 

          선언형

function spaceToHeart(text) {
  return text.replaceAll('', '❤️');
}

          명령형

function spaceToHeart(text) {
  let result = '';
  for (leti = 0; i < text.length; i++) {
    if (text[i] === '') {
      result += '❤️';
    } else {
      result += text[i];
    }
  }

  return result;
}

 



 


 

 

🧐 감명깊었던 구절

프로그래밍 언어는 프로그래밍 패러다임을 하나 이상 지원함 (절차지향, 객체지향, 함수형 등) 

자바스크립트가 함수형 프로그래밍과 객체지향을 지원하는 것은 알았지만 뭔가 class가 정이 안가서 항상 함수프로그래밍만 사용했었다. (사실 함수형 프로그래밍이 익숙했고 배우고 따라가기 바빴음 🥲) 그래도 객체지향으로 프로그래밍 된 페이지들이 많으니 배워야지 생각하고 있었는데 오늘 이렇게 쉬운 예제들과 설명으로 이해하고 나니 왜 미루고 있었나하는 자괴감이.. 무튼 어느정도 객체지향에 대해 알게 되었으니 더 공부해보고 사용해보아야겠다.

 


 

✍🏻 오늘의 짧디 짧은 소감

 

오늘 .. 면접을 보고왔다. 면접질문에 모두 대답하지 못했는데 오늘 읽은 에피소드 모두가 내가 대답하지 못했던 것들이다.
객체지향을 사용해 보았는지, class를 써보았는지. 왜. 대체. 오늘. 나온것이야 ㅠㅠ 그래도 오늘이라도 알게 되었으니 나중에 또한번 면접볼 기회가 생기면 기가맥히게 대답해야지 휴......