반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- file not found Error
- 리팩터링2판테스트
- react-ga
- formik react-query submitting not working
- cypress React
- 시스템설계면접팁
- Git commit 합치기
- 가상면접3장
- formik submitting not working
- 테스트코드책
- git squash
- 가상면접2장
- git commit merge
- s3이미지다운로드됨
- FirebaseAnalytics
- 헤드퍼스트전략패턴
- 시스템설계면접
- 디자인패턴
- awss3
- 시스템설계면접예시
- 리액트구글애널리틱스
- 시스템설계
- cypressBDD
- react
- git commit 협업
- 전략패턴
- 가상면접으로대규모시스템
- 시스템설계방법
- gitsquash
- 리팩토링2판4장
Archives
- Today
- Total
mingg IT
[함수형 프로그래밍] 1장 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다 본문
1장 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다
함수형 프로그래밍
- 수학 함수를 사용하고 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임
- 순수 함수만 사용하는 프로그래밍 스타일
부수 효과
- 함수 리턴값 이외에 하는 모든 일
- ex) 이메일 보내기, 파일 읽기, 불빛을 깜빡이기, 웹 요청하기, 자동차에 브레이크 밟기
함수형 프로그램에서 중요한 것은 액션, 데이터, 계산을 구분 하는 것이다.
액션
- 호출하는 시점과 횟수에 의존함
- ex) sendEmail, saveUserDB, getCurrentTime()
계산
- 계산은 입력 값을 계산해 출력하는 것
- 같은 입력값은 항상 같은 출력값이 옴
- 어디서 계산해도 결과는 같고 외부에 영향을 주지 않음
- 테스트가 쉬움. 언제든지 몇번을 불러도 안전함
- ex) sum(numbers), string_lengt(str)
데이터
- 이벤트에 대한 사실을 기록한 것
- 실행하지 않아도 데이터 자체로 의미가 있음
- ex) [1, 10, 2, 45], {"firstname": "Eric"}
액션, 계산, 데이터 구분 예시
유저가 작업 완료를 표시하면 서버에서 이메일을 보내주는 서비스
- 1단계: 사용자가 작업 완료 표시를 함 => 액션 (실행 횟수에 의존 하기 때문)
- 2단계: 클라이언트가 서버로 메세지를 보냄 => 메세지를 보내는건 액션. 메세지는 데이터
- 3단계: 서버가 메세지를 받음 => 액션 (메세지를 받는 것은 횟수에 의존하기 때문)
- 4단계: 서버가 데이터베이스를 변경 => 액션 (내부 상태를 바꾸는 것)
- 5단계: 서버가 누구에게 알림을 보낼지 결정 => 계산 (입력값이 같다면 서버는 항상 같은 결정을 내림)
- 아니 이건 좀 의문인게 부르는 시점에 따라 알림을 보내고 말고가 달라질 수도 있지 않나?
- 6단계: 서버가 이메일로 알림을 보냄 => 이메일 보내는 것은 액션
액션, 계산, 데이터 구분시 장점
- 함수형 프로그래밍은 분산 시스템에 잘 어울림
- 시간에 따라 바뀌는 값을 모델링할 때 실행시점이나 횟수에 의존하는 코드를 없에면, 코드를 더 쉽게 이해할 수 있음
- 액션은 실행 시점과 횟수에 의존하기 때문에 문제가 되지만, 코드 전체에 영향을 주지 않도록 격리 시키면 됨
'FrontEnd' 카테고리의 다른 글
[함수형 프로그래밍] 3장 액션과 계산, 데이터의 차이를 알기 (0) | 2023.09.23 |
---|---|
[함수형 프로그래밍] 2장 현실에서의 함수형 사고 (0) | 2023.09.17 |
[함수형 프로그래밍] 쏙쏙 들어오는 함수형 코딩 리뷰 (0) | 2023.08.24 |
[이펙티브 타입스크립트] 8장 타입스크립트로 마이그레이션 하기 (0) | 2023.08.19 |
[이펙티브 타입스크립트] 5장 any 다루기 (1) | 2023.08.10 |
Comments