더 좋은 액션 만들기
May 12, 2024
쏙쏙들어오는 함수형 코딩
# 함수형 프로그래밍에선 값의 불변성을 위해 복사를 하고 처리하는데 비용이 너무 드는건 아닌가?
함수형 프로그래밍에선 객체를 업데이트할때 복사를 하고나서 처리하는데, 비용이 너무 드는건아닌가 생각이들지만, 최신프로그래밍 언어의 런타임과 가비지컬렉터는 불필요한 메모리를 효율적으로 잘 관리하기 때문에 복사를 하는게 좋음. 그리고 복사를 하고 처리를 한다면 원본데이터의 불변성을 지킬수있기때문에 좋음.
# 코드를 많이 쪼개다보면 코드의 양이 늘어나는데, 이게 과연 좋은 코드인가?
코드를 많이 쪼개면 각각 함수의 크기는 줄어들거고, 이해하기 쉬울것임. 그리고 테스트코드 짜기에도 용이해짐.
# 설계는 엉켜있는 코드를 푸는것이다.
하나의 역할을 하는 함수이고, 작은 단위의 함수일수록 어디든 코드를 조립 할 수 있고, 테스트가 용이해지며, 유지보수하기 쉬워짐.
# 문제.
함수를 하나의 분류에만 속하도록 풀어야함.
원래 코드
function update_shipping_icons(cart) {var buy_buttons = get_buy_buttons_dom(); // buy button들의 dom을 다 불러온다.for(var i=0; i<buy_buttons.length; i++) { // element를 반복문 돌린다.var button = buy_buttons[i]; // 개별 buy button elementvar item = button.item; // 개별 buy button element의 itemvar new_cart = add_item(cart, item); // cart에 각각 개별 아이템을 추가한 listif(gets_free_shipping(new_cart)) { // 무료배송이 가능한지 여부button.show_free_shipping_icon(); // 무료배송 아이콘 노출} else {button.hide_free_shipping_icon(); // 무료배송 아이콘 숨김}}}
나의 풀이
function get_item(buttonElement) {return buttonElement.item;}function show_or_hide_icon(isShipping, buttonElement) {if(isShipping) {buttonElement.show_free_shipping_icon();} else {button.hide_free_shipping_icon();}}function update_shipping_icons(cart) {var buy_buttons = get_buy_buttons_dom();for(var i=0; i<buy_buttons.length; i++) {var button = buy_buttons[i];var item = get_item(button);var new_cart = add_item(cart, item);show_or_hide_icon(gets_free_shipping(new_cart), button);}}
정답
function update_shipping_icons(cart) {var buy_buttons = get_buy_buttons_dom();for(var i=0; i<buy_buttons.length; i++) {var button = buy_buttons[i];var item = button.item;var hasFreeShpping =gets_free_shipping_with_item(cart, item);set_free_shipping_icon(button, hasFreeShpping)}}// cart와 item 관련 동작function gets_free_shipping_with_item(cart, item) {var new_cart = add_item(cart, item);return get_free_shipping(new_cart);}// Dom 관련 동작function set_free_shipping_icon(button, isShown) {is(isShown) {buttonElement.show_free_shipping_icon();} else {button.hide_free_shipping_icon();}}
내가 푼 풀이는 정확히 각자의 동작에 따라 나누지 못했음. 정확히 어떠한 동작이 있고, 그 동작들에 따라 함수를 분류하는 능력을 길러야 할 것 같음.