개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned) 날짜
2023.01.24
오늘 읽은 범위
ep 35-38
책에서 기억하고 싶은 내용을 써보세요.
비밀번호의 저장방식
데이터베이스에 그대로 저장하거나 데이터베이스를 암호화 하는 것은 좋은 방법이 아님
해시 함수를 사용하는 방법이 좋은 방법 중 하나
해시함수는 다음과 같은 규칙이 있다.
동일한 입력값에 동일한 출력값
입력값이 약간만 바뀌어도 출력값은 크게 바뀐다
출력값을 입력한다고 출력값의 원래 입력값이 나오지 않는다
해시 함수가 변경한 값과 원래의 값을 연결하는 표인 레인보우 테이블 이 털리면 위험하다
때문에 조그마한 무작위 텍스트 '솔트(salt)'를 덧붙여서 해시 함수에 통과시키는 방법이 있다
프로그래밍 패러다임
프로그래머가 프로그래밍을 할 때의 관점, 방식(사고의 틀)
프로그래밍 언어는 프로그래밍 패러다임을 하나 또는 하나 이상을 지원한다
대표적인 프로그래밍 패러다임으로는 '절차 지향', '객체 지향', '함수형' 프로그래밍이 있다
객체 지향 프로그래밍
클래스(class)와 상속 개념이 있다. 이를 사용하면 코드의 양이 줄고 의미를 파악하기 쉬워진다
클래스 : 같은 속성을 가진 여러 데이터를 만들 때, 속성들을 묶어낸 공장 같은 역할
ex) 캐릭터를 코딩할 때 각 캐릭터마다 이름, 체력, 스킬 등을 따로 코딩하는 대신
class ㅇㅇㅇ {constructor(name, health, skill) {...}}
처럼 반복되는 속성(코드)을 따로 빼고 캐릭터 코딩은 'A(이름, 체력, 스킬)'식으로
코드 반복이 줄어드니 실수도 줄고, 새로운 속성을 추가하는 것도 쉬워진다
상속 : 어떤 클래스의 기본 속성을 다 가지면서 자신만의 속성을 추가하는 방법
ex) 게임 캐릭터를 코딩할 때, 인간, 동물, 식물 등이 있고, 인간이 다시 '아기', '유아', '성인' 등으로 나뉠 때, '아기', '유아', '성인' 클래스는 모두 다르지만 '인간' 클래스의 공통 특성
('이름 있음', '팔 2개', '다리 2개', '꼬리 0개' 등)이 있다
이때 '아기', '유아', '성인' 클래스 각각에 '인간' 클래스의 내용을 넣어주는 대신 해당 클래스를 코딩할 때 '인간' 클래스의 속성을 포함하면서 '아기', '유아', '성인' 등의 속성을 추가하도록 할 수 있다.
함수형 프로그램
선언형 프로그래밍 컨셉트. 함수 중심으로 코드를 적는 방식
버그가 발생하기 어려운(버그가 숨기 어려운) 구조
선언형/명령형 프로그래밍
선언형 프로그래밍
원하는 결괏값을 선언하는 방식
ex) 배경색을 A색으로 바꿔라, 택스트의 공백을 '_'로 바꿔라 등
이 때 배경색을 변경하는 명령어, 공백을 변경하는 함수(replaceAll) 등을 사용한다
배경색을 변경하는 명령어, 공백을 변경하는 함수(replaceAll) 등은 명령형을 작성되어 있을 것이기 때문에, 선언형 프로그래밍은 명령형 프로그래밍 위에 쓰는 형식
결과 중심의 코드 작성, 실수 적음, 코드 이해 쉬움
명령형 프로그래밍
어떻게 원하는 결괏값에 도달하는지 선언하는 방식
ex) 텍스트를 가져와서 -> 글자를 하나씩 비교해서 -> 공백이면 '_'로, 아니면 넘겨라
과정 중심의 코드 작성, 할 일을 세세하게 지시할 수 있음, 실수 많음, 코드 이해 어려움
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
지금까지의 내용이 대체로 컴퓨터나 프로그래밍 언어가 어떻게 운용되는가에 대한 내용 같았다면, 이번엔 사람이 코드를 작성하는 방식(프로그래밍 패러다임)에 대한 내용이라 신선한 느낌이었다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
절차 지향의 이해가 힘든데, 절차 지향을 주로 사용하는 예시가 있는가