일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 함수형 프로그래밍
- firestore
- SwiftUI
- os_log
- 함수형 코딩
- xcode
- swift CI 적용
- MVVM
- Swift thread
- 쏙쏙 들어오는 함수형 코딩
- SwiftUI VStack
- 하드디스크 삭제 원리
- ChatGPT
- 액션과 계산 데이터
- Firebase
- unittest
- auto_assign
- CI
- LGTM
- IOS
- Apple Developer Academy @ POSTECH
- print 단점
- swift github action
- github
- Swift
- XCTest
- combine
- 오픈소스
- 2기화이팅
- flutter
- Today
- Total
개발공방
[쏙쏙 들어오는 함수형 코딩] 함수형 프로그래밍이란? - 1 본문
https://www.yes24.com/Product/Goods/108748841
쏙쏙 들어오는 함수형 코딩 - YES24
소프트웨어의 복잡성을 다루기 위해 꼭 읽어야 할 책이 책은 함수형 사고를 통해 의도하지 않은 복잡성이 코드 전체로 퍼져나가는 것을 막고 프로그래밍을 간단하게 하는 법을 담았다. 시스템
www.yes24.com
책에 나와있는 그림과 글들이 이해하기 편한 방식으로 전개되어서 최대한 내용을 그대로 옮겼습니다. 모든 내용을 다 옮긴것은 아니고 핵심이라고 생각하는 부분들을 이해하기 편할 정도로 옮겼습니다. 책의 내용이 정말 좋으니 꼭 구매하셔서 읽으시길 강추드립니다.
https://mingwan.notion.site/1-10f49168901b40e99f540cb1eedce92d?pvs=4
(노션으로 먼저 정리하고 블로그로 옮기기 때문에 노션이 더 보기 편할 수 있습니다.)
Chapter 1. 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다
함수형 프로그래밍은 무엇인가요?
1. 수학 함수를 사용하고 부수 효과(side effect)를 피하는 것이 특징인 프로그래밍 패러다임
2. 부수 효과 없이 순수 함수(pure function)만 사용하는 프로그래밍 스타일
부수 효과는 함수가 리턴값 이외에 하는 모든 일을 말합니다. 예를 들어 메일 보내기나 전역 상태 수정하기 같은 일이 부수 효과입니다.
순수 함수는 인자에만 의존하고 부수 효과가 없는 함수입니다. 인자에만 의존한다는 말은 같은 인자를 넣으면 항상 같은 결과를 돌려준다는 말입니다.
정의에 따르면 함수형 프로그래머는 항상 부수 효과를 피하고 순수 함수만 사용해야 할 것 같지만, 실제 함수형 프로그래머는 부수 효과와 순수하지 않은 함수를 사용합니다.
실용적인 측면에서 함수형 프로그래밍 정의의 문제점
앞에서 살펴본 함수형 프로그래밍의 정의는 학문적으로는 가치가 있을지 모르지만 실제 프로그래밍을 하는 개발자에게 큰 도움이 되지 않습니다. 앞에서 나온 정의를 다시 한번 살펴봅시다.
함수형 프로그래밍
- 수학 함수를 사용하고 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임
- 부수 효과 없이 순수 함수만 사용하는 프로그래밍 스타일
이 내용은 실용적인 측면에서 세 가지 문제가 있습니다.
문제 1: 부수 효과는 필요합니다.
정의에 따르면 함수형 프로그래밍은 부수 효과를 피해야 하지만, 부수 효과는 소프트웨어를 실행하는 이유입니다. 이메일을 전송하지 않는 이메일 전송 소프트웨어가 무슨 의미가 있겠습니까? 정의에는 부수 효과를 완전히 쓰지 말라는 것처럼 되어 있지만 필요할 때는 써야 합니다.
문제 2: 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있습니다.
함수형 프로그래머는 부수 효과가 실제로 필요하지만 문제가 될 수 있다는 것을 알기 때문에 부수 효과를 잘 다루기 위한 도구를 많이 알고 있습니다. 정의에는 순수 함수만 쓰라는 것처럼 되어 있지만, 함수형 프로그래머는 순수하지 않은 함수도 사용합니다. 그리고 순수하지 않은 함수를 잘 다룰 수 있는 기술이 많이 있습니다.
문제 3: 함수형 프로그래밍은 실용적입니다.
정의에서는 함수형 프로그래밍이 수학적이라 실제 소프트웨어 개발에서 사용하지 않는 것처럼 느껴집니다. 하지만 함수형 프로그래밍으로 잘 만들어진 좋은 소프트웨어가 많이 있습니다. 그래서 위 정의는 함수형 프로그래밍을 시작하려는 사람에게 혼란을 줍니다.
함수형 프로그래밍을 학문적 지식이 아닌 기술과 개념으로 보기
이 책에서는 일반적인 함수형 프로그래밍의 정의를 쓰지 않습니다. 함수형 프로그래밍은 많은 사람이 서로 다른 의미로 생각합니다. 또 학술적으로도 실용적으로도 많은 내용이 있습니다.
<쏙쏙 들어오는 함수형 코딩>은 함수형 프로그래밍에 관한 학술적인 최신 연구 자료나 난해한 개념은 뺐습니다. 그래서 함수형 프로그래밍을 하기 위해 당장 쓸 수 있는 기술과 개념을 배울 수 있습니다. 이 책을 쓰면서 함수형 프로그래밍의 중요한 개념은 객체 지향 프로그래밍이나 절차적 프로그래밍을 가리지 않고 모든 프로그래밍 언어에서 쓸 수 있다는 것을 알았습니다. 함수형 프로그래밍의 진정한 아름다움은 코드 어느 곳에나 적용할 수 있는 유익한 내용이라는 점입니다.
그럼 이제 함수형 프로그래머들이 입을 모아 중요하다고 말하는 기술인 액션과 계산, 데이터를 구문하는 일에 대해 살펴봅시다.
액션과 계산, 데이터 구분하기
함수형 프로그래머는 직감적으로 코드를 세 분류로 나눕니다.
- 액션
- 계산
- 데이터
아래는 어떤 코드에서 가져온 내용입니다. 별(*) 표시가 있는 코드를 주의해서 보세요.
별 표시가 있는 함수는 언제, 얼마큼 호출하는지가 중요하기 때문에 부를 때 신중해야 합니다. 중요한 이메일을 중복으로 보내거나 전송이 안 되는 것을 바라지는 않을 것입니다.
별 표시가 있는 코드를 액션이라고 부르겠습니다. 액션을 나머지 코드와 구분해 봅시다.
함수형 프로그래머는 부를 때 조심해야 하는 코드를 구분합니다.
액션(선 위쪽에 있는 코드)은 호출하는 시점과 횟수에 의존합니다. 그래서 호출할 때 조심해야 합니다.
반면 선 아래쪽에 있는 코드는 사용하기 쉽습니다. 예를 들어 sum함수는 호출하는 시점이 중요하지 않습니다. 언제 호출해도 항상 같은 값을 주기 때문입니다. 호출하는 횟수도 역시 중요하지 않습니다.
다음으로 호출 가능 여부를 기준으로 코드를 나눌 수 있습니다. 새로운 선을 긋고 코드를 나눠 봅시다.
함수형 프로그래머는 실행하는 코드와 그렇지 않은 코드를 구분합니다.
액션과 계산, 데이터를 구분하는 것은 함수형 프로그래밍의 기본 개념입니다.
함수형 프로그래머는 액션과 계산, 데이터를 구분합니다.
앞에서 액션과 계산, 데이터를 구분하는 것이 함수형 프로그래밍의 핵심 개념이라고 했습니다. 간단한 시나리오를 통해 더 자세히 알아봅시다.
프로젝트 관리를 위해 클라우드 서비스를 만든다고 생각해 봅시다. 여러 클라이언트가 작업 완료 표시를 하면 서버에서 이메일을 통해 알려주는 서비스입니다.
1단계: 사용자가 작업 완료 표시를 함
이것은 UI 이벤트인데 실행 횟수에 의존하기 때문에 액션입니다.
2단계: 클라이언트가 서버로 메시지를 보냄
메시지를 보내는 것도 액션입니다. 그리고 메시지 자체는 나중에 서버에서 해석해야 하는 값이기 때문에 데이터입니다.
3단계: 서버가 메시지를 받음
메시지를 받는 것은 횟수에 의존하므로 액션입니다.
4단계: 서버가 데이터베이스를 변경
내부 상태를 바꾸는 것은 액션입니다.
5단계: 서버가 누구에게 알림을 보낼지 결정
결정하는 것은 계산입니다. 입력값이 같다면 서버는 항상 같은 결정을 내리기 때문입니다.
6단계: 서버가 이메일로 알림을 보냄
이메일 보내기는 액션입니다. 같은 메일을 한 번 보내느 것과 두 번 보내는 것은 다릅니다.
위에서 구분한 방법이 잘 이해되지 않아도 좋습니다. 파트 1에서 코드를 구분하는 방법과 왜 그렇게 하는지 자세히 설명하겠습니다.
함수형 프로그래밍에서는 코드를 세 가지로 분류합니다.
각 분류가 어떤 특징을 갖고 있는지 살펴봅시다.
- 액션
액션은 실행 시점이나 횟수 또는 둘 다에 의존합니다. 긴급한 메일을 오늘 보내는 것과 다음 주에 보내는 것은 완전히 다릅니다. 같은 메일을 10번 보내는 것과 한 번 보내는 것 또는 보내지 않는 것 역시 다릅니다. - 계산
계산은 입력값으로 출력값을 만드는 것입니다. 같은 입력값을 가지고 계산하면 항상 같은 결괏값이 나옵니다. 언제, 어디서 계산해도 결과는 같고 외부에 영향을 주지 않습니다. 계산은 테스트하기 쉽고 언제든지 몇 번을 불러도 안전합니다. - 데이터
데이터는 이벤트에 대해 기록한 사실입니다. 데이터는 실행하는 코드만큼 복잡하지 않기 때문에 다른 것과 구분됩니다.
결론
함수형 프로그래밍 기술과 원칙에 대한 지식은 방대합니다. 하지만 그 모든 것은 액션과 계산, 데이터를 구분하는 것부터 시작합니다.
'개발 토크' 카테고리의 다른 글
[쏙쏙 들어오는 함수형 코딩] 액션과 계산, 데이터 - 2 (0) | 2023.07.09 |
---|---|
[쏙쏙 들어오는 함수형 코딩] 책을 읽게 된 이유 - 0 (0) | 2023.06.21 |
팀의 성장을 멈추게 만드는 마법의 단어 'LGTM' (3) | 2023.05.29 |
저장 공간 삭제에 관한 의문 (feat. 하드디스크 삭제 원리) (2) | 2023.03.07 |
Apple Developer Academy @ POSTECH 회고 겸 꿀팁들 (8) | 2023.02.28 |