Skip to main content

Command Palette

Search for a command to run...

Ch03 액션, 계산, 데이터의 차이를 알기

Published
2 min readView as Markdown

액션, 계산, 데이터

구분하기

모든 개발 과정에서 적용 가능

  • 문제에 대해 생각할 때

    • 코드를 작성할 때 특별히 주의해야할 부분(액션), 데이터로 처리해야 할 부분, 결정을 내려야 하는 부분(계산) 명확히 구분
  • 코딩할 때

    • 최대한 액션에서 계산 빼내기

    • 계산에서 데이터 분리할 수 있는지 생각하기

    • 액션이 계산이 될 수 있는지, 계산은 데이터가 될 수 있는지 고민하기

  • 코드 읽을 때

    • 액션은 시간에 의존하기 때문에 더욱 조심해야 함

    • 숨어있는 액션까지도 찾아야 함

일상에서 액션/계산/데이터 구분; 장보기

타임라인

  • 냉장고 확인 (액션)

    • 확인하는 시점이 중요하므로 액션

    • 냉장고에 있는 제품은 데이터; 현재 재고

  • 운전해서 상점으로 가기 (액션)

  • 필요한 것 구입하기 (액션)

    • 현재 재고 (데이터)

    • 필요한 재고 (데이터)

    • 재고 빼기 (계산)

    • 장보기 목록 (데이터)

    • 목록에 있는 것 구입 (액션)

  • 운전해서 집으로 오기 (액션)

  • 음식을 냉장고에 보관하기 (액션)

타임라인을 크게 보면 전부 액션이지만

  • 액션 안에 계산과 데이터로 나눌 수 있고, 각각의 액션도 세부 액션으로 나눌 수 있음

  • 계산도 더 작은 계산과 데이터로 나누고 연결할 수 있음

  • 데이터는 데이터만 조합할 수 있음

    • 데이터 찾는 일을 먼저 해야, 동작에 대해 많은 것을 알 수 있음
  • 계산 단계가 있지만 잘 보이지 않는 이유는 계산이 우리 사고 과정에 녹아있기 때문

데이터

  • 의미를 담는 방법: 자료구조 활용

  • 불변성

    • copy-on-write: 변경할 때 복사본 만들기

    • 방어적 복사 defensive copy: 보관하려고 하는 데이터의 복사본 만들기

  • 데이터로 할 수 있는 것

    • 직렬화

    • 동일성 비교

    • 자유로운 해석/활용

계산 (순수함수/수학함수)

  • 의미를 담는 방법: 연산

  • 액션보다 계산이 좋은 이유

    • 테스트하기 쉽다

    • 기계적 분석이 쉽다; 정적 분석 - 자동화 분석

    • 조합하기 좋다; 계산을 조합해 더 큰 계산 만들기

액션 (순수하지 않은 함수/부수효과 함수)

  • 의미를 담는 방법: 외부 세상에 영향을 주는 일

  • 다루기 힘들지만, 액션은 꼭 써야 함

액션을 잘 사용하는 방법

  • 가능한 적게 사용; 액션 대신 계산을 사용할 수 있는지 고민

  • 가능한 작게 만들기; 액션에서 액션과 관련 없는 코드는 모두 제거

  • 외부 세계와 상호작용하는 것을 제한; 어니언 아키텍처(👉 18장)

  • 호출 시점/횟수에 의존하는 것을 제한

함수형 사고 적용하기

새로 코드 구현 순서

  • 데이터

  • 계산

    • 잘 만들어진 시스템이라면, 추상적인 개념이 바뀌지 않는 한 계산은 바뀌지 않아야
  • 액션

기존 코드에 적용

  • 액션을 활용하는 함수도 액션

    • \=> 액션은 코드 전체로 퍼진다

    • 어떤 함수가 액션인지 명확하게 구분할 수 있어야

More from this blog

Kimi Agentic Slides + Nano Banana로 4살 아들 맞춤 동화 만들기

Kimi Agentic Slides 지난주 금요일 (11. 28.) Kimi에서 Agentic Slide를 런칭하면서, 48시간 무제한 슬라이드 생성 이벤트를 진행했다. Nano Banana Pro가 워낙 강렬해서 이건 또 뭐가 다른지 써보고 있는 와중에, 아들이 옆방에서 징징대는 소리가 들렸고, 이걸로 동화책을 만들어봐도 되겠다는 생각이 뇌리를 스쳤다. 아들이 워낙 자동차를 좋아하고, 요즘 육아 이슈가 사회성을 길러주는 거라, 처음엔 사회성...

Dec 1, 20252 min read29
Kimi Agentic Slides + Nano Banana로 4살 아들 맞춤 동화 만들기

[발번역] Deno에 package.json 지원을 추가한 이유

원문: Why We Added package.json Support to Deno 내맘대로 세줄 요약 Node.js package.json 구린거 맞음. 이거에 대한 생각 여전함 근데 HTTP URL 쓰다보니 더 복잡하고 지저분해진 것도 맞음 이것저것 해보다가 뭐 어쩔수없이 이번에 package.json 지원하긴 했는데, 앞으로 deno: URL 지원할 거임. 기대해보셈 Deno 최신 버전 (v1.31, https://deno.com...

Mar 21, 20235 min read199

Wii-World

28 posts