-
[TIL] IT 5분 잡학사전 #35-#38TIL 2024. 3. 26. 22:19728x90
오늘 TIL 3줄 요약
- 해시 함수를 사용하면 비밀번호 시스템을 더 안전하게 구현할 수 있다.
- 프로그래밍 패러다임에는 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍이 있다.
- 함수형 프로그래밍은 함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지한다.
TIL (Today I Learned) 날짜
2023.03.26
오늘 읽은 범위
4장. 코딩별 안내서_ 컴퓨터 공학 편 2
에피소드 35. 비밀번호는 어떻게 저장될까?
에피소드 36. 객체 지향 프로그래밍이 뭐죠? 1
에피소드 37. 객체 지향 프로그래밍이 뭐죠? 2
에피소드 38. 함수형 프로그래밍이 뭐죠?
책에서 기억하고 싶은 내용
- 해시 함수를 사용하면 비밀번호 시스템을 더 안전하게 구현할 수 있다. 12345 라고 입력해서 회원가입을 하면 해시 함수가 !aef3eZ&^와 같은 값으로 만들어 저장한다.
- 해시 함수는 동일한 입력값에 대해 동일한 출력값을 가지며 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다. 또한 반대로 입력한다고 해서 원래 값이 나오지 않는다.
- 레인보우 테이블은 해시 함수가 변경된 값을 원래의 값과 연결한 표다. 비밀번호와 무작위 텍스트 솔트를 합치면 원래 비밀번호를 찾을 수 없다.
- 프로그래밍 패러다임(programming paradigm)은 프로그래밍을 할 떄의 관점, 방식을 말한다. 프로그래밍 언어는 이런 프로그래밍 패러다임을 하나 또는 하나 이상을 지원하는데 대표적인 예시로 절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍이 있다.
- 객체 지향 프로그래밍의 예시
// 게임을 만드는 과정으로 객체 지향 프로그래밍을 설명했다. // 주인공 플레이어에 대한 데이터를 나타냈다. //name,health,skill이라는 공통된 속성을 가지고 있다. 즉 일일이 코딩하는 방법은 좋지 않다. const player_1 = { name: "Bill Gates", health: 85, skill: "Programmer", }; const player_2 = { name: "Elon Musk", health: 90, skill: "Tesla", }; const player_3 = { name: "Warren Buffett", health: 100, skill: "Investor", }; //플레이어를 공장처럼 찍어내는 클래스(class)를 생성해준다. 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 elon = new Player("Elon Musk", 90, "Tesla") const bill = new Player("Warren Buffett", 100, "Investor")
//심즈를 클래스의 상속으로 표현했다. class Human { //Human class 이름, 팔 2개, 다리 2개 constructor(name) { this.name = name; this.arms = 2; this.legs = 2; } } class Teenager { //Teenager class 이름, 팔 2개, 다리 2개에 감정적이고 친구를 욕하는 기능이 있다. constructor(name) { this.name = name; this.arms = 2; this.legs = 2; this.emotional = true; } curse() { //curse method를 실행시키면 %^$#QE!@#이 return된다. return `%^$#QE!@#`; } } class Baby { //Baby class 이름, 팔 2개, 다리 2개에 귀엽고 '으앙'하고 우는 기능이 있다. constructor(name) { this.name = name; this.arms = 2; this.legs = 2; this.cute = true; } cry() { //cry method를 실행시키면 waa waa가 return된다. return `waa waa`; } } //성인을 상속받은 Teenager 클래스 Human 클래스의 기본 속성은 다 상속받았으니 감정,욕설 기능만 추가한다. class Teenager extends Human { constructor(name){ this.emotional = true; } curse(){ return `%^$#QE!@#`; } } //성인을 상속받은 Baby 클래스 Human 클래스의 기본 속성은 다 상속받았으니 귀여움,울기 기능만 추가한다. class Baby extends Human { constructor(name){ this.cute = true; } cry(){ return `waa waa`; } } //상속을 사용하여 코드의 양이 훨씬 줄어들었고, 의미도 더 명확하게 바뀌었다.
- 함수형 프로그래밍을 지원하는 언어로 자바, 자바스크립트, 파이썬 등이 있다. 버그가 발생하기 어려운 구조라서 개발자에게 매우 유용하다. 함수 중심으로 코드를 적는 방식으로 선언형 프로그래밍 콘셉트를 유지한다.
- 선언형 프로그래밍은 원하는 결괏값을 선언한다. 명령형 프로그래밍은 원하는 결괏값에 어떻게 도달하는지 선언한다.
오늘 읽은 소감? 떠오르는 생각
- 오늘의 학습은 새로운 지식을 얻을 소중한 기회였다. 프로그래밍 패러다임을 이해하는 과정에서 코드 작성에 대한 다양한 접근 방식을 배웠다. 특히 객체 지향 프로그래밍과 함수형 프로그래밍의 차이에 대해 심층적으로 이해하고, 선언형 프로그래밍 콘셉트를 적용하는 방법을 습득했다. 이러한 학습을 통해 코드를 더 간결하게 작성하고, 오류를 최소화하는 클린 코드에 대한 중요성을 다시금 깨닫게 되었다.
728x90'TIL' 카테고리의 다른 글
[TIL] IT 5분 잡학사전 #Final (0) 2024.03.29 [TIL] IT 5분 잡학사전 #39-#45 (0) 2024.03.27 [TIL] IT 5분 잡학사전 #30-#34 (0) 2024.03.24 [TIL] IT 5분 잡학사전 #26-#29 (0) 2024.03.23 [TIL] IT 5분 잡학사전 #22-#25 (0) 2024.03.21