자신에게 친절할 것 :)

book

[노개북] day 12

Tashapark 2024. 3. 27. 01:46
728x90

오늘 TIL 3줄 요약

  • 비밀번호 LS에 냅다 저장 x. 해시함수 --> 레인보우 테이블로 확인 가능 --> 솔트로 무작위 텍스트 합쳐서 해시함수 통과. => 확인 X
  •  객체지향 프로그래밍으로 코드를 간결하게, 함수형으로 버그 발생을 어렵게 하기
  • 번아웃이 왔다고 느끼면 너무 늦은 것... 맞지. 그럼 늦어. 미리 미리 예방하자. 

TIL (Today I Learned) 날짜

2024. 03. 26

 

오늘 읽은 범위

35 ~ 38 에피소드

 

책에서 기억하고 싶은 내용을 써보세요.

  • 프로그래밍 패러다임: 프로그래머가 프로그래밍을 할 때의 관점, 방식  등의 사고의 틀. 
  • 프로그래밍 언어는 이런 프로그래밍 패러다임을 1개 또는 그 이상 지원. 
  • 자바는 객체 지향 프로그래밍, 함수형 프로그래밍 지원 
  • 절차 지향 프로그래밍도 한 갈래임. 

  • 객체지향 프로그래밍: 클래스를 이용해 속성은 같지만 데이터는 다른 중복된 내용을 class함수 하나로 받을 수 있음. 
const player_1 = {
  name: "Bill Gates",
  health: 85,
  skill: "Programmer",
};

const player_2 = {
  name: "Virginia Woolf",
  health: 60,
  skill: "Author",
};
//... 끝이 없이 계속 써줘야 함.. 그래서 객체 지향

//객체 지향은
class Player {
  constructor(name, health, skill) {
    this.name = name;
    this.health = health;
    this.skill = skill;
    this.xp = 0; //게임으로 생각하면 xp는 0에서 시작
  }
}

const bill = new Player("Bill Gates", 85, "Programmer");
const woolf = new Player("Virginia Woolf", 60, "Author");
//new Player로 class에 넣을 수 있음.

 

  • 비슷하지만, 반복되는 것의 상속도 가능함.
//심즈 같이 사람을 만드는 게임
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 `aGA@#%%#@`;
  }
}
class Baby {
  constructor(name) {
    this.name = name;
    this.arms = 2;
    this.legs = 2;
    this.cute = true;
  }
  cry() {
    return `waa waa`;
  }
}

//class Human이 계속 중복되는 것을 extends로 수정 가능
//더 짧아짐.
class Human {
  constructor(name) {
    this.name = name;
    this.arms = 2;
    this.legs = 2;
  }
}
class Teenager extends Human {
  constructor(name) {
    this.emotional = true;
  }
  curse() {
    return `aGA@#%%#@`;
  }
}
class Baby extends Human {
  constructor(name) {
    this.cute = true;
  }
  cry() {
    return `waa waa`;
  }
}

  • 함수형 프로그래밍: 버그가 발생하기 어려운 구조로, 자바, 자스, 파이썬 등이 지원. 
  • 선언형과 명령형 프로그래밍을 알아야 함. 
  • 선언형 프로그래밍: 원하는 결과 값을 선언함. --> BLT샌드위치 만들어줘
  • 예, CSS
//선언형 -> 공백을 💗로 바꾸기
function spaceToHeart(text) {
  return text.replaceAll(" ", "💗");
}
  •  사실상 선언형 프로그래밍은 명령형 프로그래밍 위에 쓰는 것. replaceAll도 명령형으로 작성됐을테니깐. 

 

  • 명령형 프로그래밍: 원하는 결과 값에 어떻게 도달하는 지 선언함 -->
  • 1) 빵 2개 굽기
  • 2) 양상추 2-3장 씻고, 토마토 썰어서 2조각 준비, 구운 베이컨 3개 준비
  • 3) 1)의 빵 1개 위에 2) 재료를 쌓고, 나머지 빵으로 덮기
//명령형 -> 공백을 💗로 바꾸기
function spaceToHeart(text) {
  //text를 가져와서
  let result = "";
  for (let i = 0; i < text.length; i++) {
    //한 글자씩 비교
    if (text[i] === " ") {
      result += "💗"; //공백이면 💗로 교체
    } else {
      result += text[i]; //공백 아니면 패스
    }
  }
  return result;
}
  • 명령형은 세세하게 지시할 수 있지만, 실수하기 쉽고 다른 동료가 이해하기 힘들수도 있음. 
  • 선언형은 결과 중심이라 이해도 쉽고, 동료가 이해하기도 좋음. 

  • 홀수를 제거하는 함수형 프로그램밍 
  • 함수를 인자로 쓴 게 특징적.
function checkForOdd(item) {
  return item % 2 === 0;
}

function removeOdd(items) {
  return items.filter(checkForOdd);
}

 

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  •  객체지향이나 함수형 프로그래밍이 무엇인지 궁금했는데 찍먹 해본 것 같아서 좋음.

 

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 절차지향 프로그래밍은 뭘까?

 

오늘 읽은 다른사람의 TIL

 

 

 

 

728x90
반응형

'book' 카테고리의 다른 글

[노개북] day 14 Final 감상문  (0) 2024.03.28
[노개북] day 13  (2) 2024.03.28
[노개북] day 10  (1) 2024.03.25
[노개북] day8  (1) 2024.03.24
[노개북] day5  (0) 2024.03.21