함수형 프로그래밍에서는 어쩔 수 없이 부수효과가 필요하다.
개념을 크게 다음과 같이 나눌 수 있다.
1. 액션 - 실행 시점이나 횟수 또는 둘다에 의존
2.계산 - 같은 입력값을 가지고 계산하면 항상 같은 결과값이 나옴
3.데이터 - 이벤트 기록에 대한 사실
함수형 프로그래밍은 분산 시스템에 잘 어울린다.
시간에 따라 바뀌는 값을 모델링할 때 동작 방법을 이행하는데 도움이 될 수 있다.

액션보다 계산이 좋은점
1. 테스트하기가 쉽다.
2.기계적인 분석을 하기 쉽다.
3.계산은 조합하기 좋다.
액션
액션은 다양한 형태로 나타난다. 또한 액션은 코드 전체로 전파될 수 있기에 주의해서 사용해야 한다.
1. 함수 호출 - alert('aa');
2.메서드 호출 - console.log('hello');
3.생성자 - new Date();
4.상태 - 값할당
5.속성 삭제
계산 추출 리팩토링하기
1. 계산 코드를 찾아 빼낸다.
2. 새 함수에 암묵적 입력과 출력을 찾는다.
3. 암묵적 입력은 인자로 암묵적 출력은 리턴값으로 바꾼다.
function add_item_to_cart(name, price){
shopping_cart = add_item(shopping_cart, name, price);
calc_cart_total();
}
function add_item(cart, name, price){
var new_cart = cart.slice();
new_cart.push({
name: name,
price: price
})
return new_cart;
}
추상화 단계를 선택하는 것
코드 라인 수가 늘더라도 계산함수는 응집력있고 재사용하기가 쉬움
function gets_free_shipping(cart, item_price){
return item_price + total >= 20;
}
function gets_free_shipping(cart){
return calc_total(cart) >= 20;
}
카피 온 라이트
1. 복사본 만들기
2. 복사본 변경하기
3. 복사본 리턴하기
계산 - 불변 데이터 구조를 읽는 것
쓰기였던 액션도 카피 온 라이트를 활용하여 읽기인 계산 동작으로 바꿀 수 있음
레거시 코드와 불변성
방어적 복사 - 데이터를 변경할 수도 있는 코드와 불변성 코드 사이에 데이터를 주고 받기 위한 원칙
1. 데이터가 안전한 코드에서 나갈 때 복사하기
2. 안전한 코드로 데이터가 들어올 때 복사하기
function add_item_to_cart(name, price){
var_item = make_cart_item(name, price);
shopping_cart = add_item(shopping_cart, item);
var total = calc_total(shopping_cart);
set_cart_total_dom(total);
update_shipping_icons(shopping_cart);
update_tax_dom(total);
shopping_cart = black_friday_promotion_safe(shopping_cart);
}
//방어적 복사 예시
function black_friday_promotion_safe(cart){
var cart_copy = deepCopy(cart);
black_friday_promotion(cart_copy);
return deepCopy(cart_copy);
}
웹 기반 api -암묵적으로 방어적 복사
json도 깊은 복사본
깊은 복사 vs 얕은 복사
깊은 복사는 원본과 어떤 데이터 구조도 공유하지 않는 것이 얕은 복사와의 차이점으로
깊은 복사가 비용이 더 비쌈 (중첩된 객체 배열 모두 복사함)
계층형 설계 패턴
1. 직접 구현
함수 본문에서 적절한 구체화 수준으로 해결해야 된다.
2. 추상화 벽
어떤 계층은 중요한 세부 구현을 감추고 인터페이스를 제공한다.
3. 작은 인터페이스
시스템이 커질수록 비지니스 개념을 나타내는 중요한 인터페이스는 작고 강력한 동작으로 구성하는 것이 좋다.
4. 편리한 계층
소프트웨어를 더 빠르고 고품질로 제공하는 데 도움이 되는 계층에 시간을 투자해야 함
선호에 따라 계층을 선호하며 안되며 추상화 계층은 작업할 때 편리해야 함

작은 인터페이스를 유지해야 하는 이유
1.추상화 벽에 코드가 많을수록 고쳐야 할 것이 많음
2.추상화 벽에 있는 코드는 낮은 수준의 코드이기 때문에 더 많은 버그가 있을 수 있음
3.낮은 수준의 코드는 이해하기 더 어려움
4.추상화 벽에 코드가 많을수록 팀 간 조율해야 할 것도 많아짐
5.추상화 벽에 인터페이스가 많으면 알아야 할 것이 많아 사용하기 어려움
'CS' 카테고리의 다른 글
| java, js map대해 알아보자 (0) | 2025.11.16 |
|---|---|
| [CS] HTTP (1) | 2025.11.08 |
| 웹 폰트 어디까지 알고 있니? (0) | 2025.10.21 |
| 자바스크립트 비동기 (0) | 2025.10.10 |
| css의 라이브러리에 대해 알아보자 (0) | 2025.10.09 |