Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

CS

함수형 코딩 정리

by 꽁이꽁설꽁돌 2026. 6. 21.
728x90
SMALL

함수형 프로그래밍에서는 어쩔 수 없이 부수효과가 필요하다.

 

개념을 크게 다음과 같이 나눌 수 있다.

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