반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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 31
Archives
Today
Total
관리 메뉴

지식조각모음

chapter 1 본문

책/쏙쏙 들어오는 함수형 코딩

chapter 1

y00 2023. 10. 25. 16:12
반응형
💡 이번 장에서 살펴볼 내용
- 함수형 사고가 무엇인지 설명합니다.
- 다른 함수형 프로그래밍 책과 어떻게 다른지 알 수 있습니다.
- 함수형 프로그래머가 코드를 바라보는 특별한 방법을 알게 됩니다.

함수형 프로그래밍은 무엇인가요?

함수형 프로그래밍의 정의

  1. 수학 함수를 사용하고 부수 효과(side effect)를 피하는 것이 특징인 프로그래밍 패러다임
  2. 부수 효과 없이 순수 함수(pure function)만 사용하는 프로그래밍 스타일
  • 부수 효과
    • 함수가 리턴값 이외에 하는 모든 일
    • 예: 파일 읽기, 전역 상태 수정하기
    • 부수 효과의 문제점: 리턴값을 얻기 위해 함수를 호출할 때마다 의도하지 않은 행동이 발생함
  • 순수 함수
    • 인자에만 의존하고(같은 인자를 넣으면 항상 같은 결과를 돌려줌) 부수 효과가 없는 함수
    • = 수학 함수

실용적인 측면에서 함수형 프로그래밍 정의의 문제점

정의와는 달리 실제로는 부수 효과를 피하고 순수 함수만 사용할 수 없다.

문제: 부수 효과는 필요하다.

정의에서는 부수 효과를 피하라고 하지만 실제로 부수 효과는 필요하다. 파일 내용을 수정하는 함수는 파일 읽기라는 부수 효과가 반드시 필요하다. 필요할 때는 부수 효과를 써야 한다.

정의에는 순수 함수만 사용해야 하는 것처럼 나와있지만 실제로 함수형 프로그래머는 순수하지 않은 함수도 사용하며 이런 함수를 잘 다룰 수 있는 도구와 기술이 있다.


액션과 계산, 데이터

함수형 프로그래머는 코드를 세 분류로 나눈다.

  1. 액션
  2. 계산
  3. 데이터

액션 코드

아래 예시 코드가 있다. 언제, 얼마큼 호출되는지 중요한 함수는 별(*)로 표시하고 액션이라고 부르겠다.

// 사람에 대한 정보
{"firstname": "Eric", "lastname": "Normand"}

// *
// 이메일을 보내는 함수
sendEmail(to, from, subject, body)

// 모든 숫자를 더하는 함수
sum(numbers)

// *
// 데이터베이스에 저장하면 다른 시스템에서 저장한 데이터를 볼 수 있다.
saveUserDB(user)

// 같은 문자열을 넣으면 항상 같은 길이를 준다.
string_length(str)

// *
// 부를 때마다 다른 시간을 준다.
getCurrentTime()

// 숫자 리스트
{1, 10, 2, 45, 3, 98}

이 함수들을 다시 정리해보자. 기준은 호출하는 횟수나 호출하는 시점이 중요한 함수를 기준으로 삼는다. 이런 액션 코드들은 호출 시점과 횟수에 의존하므로 호출할 때 조심해야 한다.

// 액션 코드들
sendEmail(to, from, subject, body)
saveUserDB(user)
getCurrentTime()
// 일반 코드들
{"firstname": "Eric", "lastname": "Normand"}
sum(numbers)
string_length(str)
{1, 10, 2, 45, 3, 98}

계산 코드

이제 새로운 기준으로 다시 나눠보겠다. 이번에는 액션이 아닌 코드들 중에 동작에 대한 내용에 집중해보자. 실행 여부에 따라 코드를 나눠보면 계산은 실행하기 전까지 어떻게 동작할지 알 수 없다. 하지만 데이터는 정적이고 보이는 그대로이다.

// 액션 코드들
sendEmail(to, from, subject, body)
saveUserDB(user)
getCurrentTime()
// 계산
sum(numbers)
string_length(str)
// 데이터
{"firstname": "Eric", "lastname": "Normand"}
{1, 10, 2, 45, 3, 98}

함수형 프로그래머는 코드를 액션, 계산, 데이터로 구분한다. 일반적으로 액션 보다는 계산이 쓰기 쉽고 계산 보다는 데이터가 쓰기 쉽다고 생각한다. 가장 사용하기 좋은 것은 데이터이다.

액션, 계산, 데이터 정의

  1. 액션
    • 부르는 시점횟수에 의존
    • 예: 메일을 오늘 보내는 것과 다음주에 보내는 것은 다르다 → 시점
    • 예: 메일을 10번 보내는 것과 1번 보내는 것은 다르다 → 횟수
  2. 계산
    • 실행 가능하며 입력 값을 계산해 출력하는 것
    • 입력 값으로 출력 값을 만든다.
    • 언제 어디서 계산해도 입력이 같으면 출력도 같고 외부에 영향을 주지 않는다.
    • 테스트하기 쉽다.
  3. 데이터
    • 정적이며 이벤트에 대한 사실을 기록한 것
    • 실행하지 않아도 데이터 자체로 의미가 있다.

액션, 계산, 데이터 사용의 장점

  • 분산 시스템에 잘 어울린다.
    • 여러 컴퓨터가 통신하기 때문에 메세지의 순서나 처리가 복잡해진다.
    • 실행 시점과 횟수에 의존하면 코드가 어렵고 버그가 발생하기 쉽다.
    • 계산과 데이터는 실행 시점과 횟수에 의존하지 않기 때문에 이런 점에서 안전하다.
    • 액션은 코드 전체에 영향을 주지 않도록 격리시킬 수 있다.
반응형

' > 쏙쏙 들어오는 함수형 코딩' 카테고리의 다른 글

Chapter 10. 일급 함수 1  (0) 2023.10.25
스터디 시작  (0) 2023.10.25