학습
Lua 함수형 프로그래밍 패턴
Lua 함수형 프로그래밍 패턴 — 중급
함수형 프로그래밍 패턴
1. 도입 (왜 배워야 하는가)
함수형 프로그래밍은 프로그래밍 패러다임 중 하나로, 함수와 그 함수의 조합을 통해 프로그램을 구성하는 방법입니다. 현대의 많은 프로그래밍 언어와 프레임워크가 함수형 프로그래밍의 개념을 도입하여 코드의 재사용성, 유지보수성, 그리고 가독성을 높이고 있습니다. 실무에서 이러한 패턴을 활용하면 코드의 복잡성을 줄이고, 테스트와 디버깅을 용이하게 만들어 줍니다.
함수형 프로그래밍을 모르면, 코드가 복잡해지고, 상태를 관리하기 어려워져 버그가 생길 확률이 높아집니다. 또한, 팀원 간의 협업이 힘들어지고, 코드의 재사용성이 떨어져서 개발 효율이 저하될 수 있습니다.
2. 핵심 개념 설명
2.1. 고阶 함수 (Higher-Order Functions)
고阶 함수는 다른 함수를 인자로 받거나, 함수를 반환하는 함수를 말합니다. 이는 마치 요리를 할 때 조리법(함수)을 다른 요리사에게 전달해주는 것과 비슷합니다.
2.2. 순수 함수 (Pure Functions)
입력값이 동일하면 항상 같은 값을 반환하고, 외부 상태에 영향을 미치지 않는 함수입니다. 이는 마치 수학의 함수처럼 동일한 입력에 대해 항상 같은 출력을 보장합니다.
| 용어 | 정의 |
|---|---|
| 고阶 함수 | 다른 함수를 인자로 받거나 반환하는 함수 |
| 순수 함수 | 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수 |
| 불변성 (Immutability) | 데이터가 변경되지 않는 성질 |
3. 기본 코드 예제
아래는 고阶 함수와 순수 함수를 사용한 간단한 예제입니다.
-- 순수 함수 정의
function add(x, y)
return x + y
end
-- 고阶 함수 정의
function applyFunction(func, a, b)
return func(a, b) -- 전달받은 함수를 호출
end
-- 함수 호출
result = applyFunction(add, 5, 10)
print(result) -- 15
add함수는 두 수를 더하는 순수 함수입니다.applyFunction함수는 고阶 함수로, 다른 함수를 인자로 받아 호출합니다.applyFunction(add, 5, 10)을 호출하면,add함수가 호출되어 5와 10을 더한 결과인 15를 반환합니다.
4. 실전 활용 예제
4.1. 쇼핑몰에서 장바구니 계산하기
장바구니에 담긴 상품들의 총 가격을 계산할 때 고阶 함수를 활용할 수 있습니다.
local cart = { {price = 100, quantity = 2}, {price = 200, quantity = 1} }
function calculateTotal(cart)
local total = 0
for _, item in ipairs(cart) do
total = total + item.price * item.quantity
end
return total
end
print(calculateTotal(cart)) -- 400
4.2. 배열 필터링
특정 조건에 맞는 요소만 추출하는 예제입니다.
local numbers = {1, 2, 3, 4, 5}
function filterEvenNumbers(nums)
local result = {}
for _, num in ipairs(nums) do
if num % 2 == 0 then
table.insert(result, num)
end
end
return result
end
local evenNumbers = filterEvenNumbers(numbers)
for _, num in ipairs(evenNumbers) do
print(num) -- 2, 4
end
5. 흔한 실수와 주의사항
5.1. 상태 변경
-- 잘못된 예
total = 0
function addToTotal(value)
total = total + value -- 외부 상태 변경
end
-- 올바른 예
function addToTotal(total, value)
return total + value -- 외부 상태 변경 없음
end
상태를 변경하는 함수는 예측 불가능한 결과를 초래할 수 있습니다.
5.2. 함수 재사용
-- 잘못된 예
function multiply(x, y)
return x * y
end
function calculateArea(length, width)
return multiply(length, width) -- 재사용하지 않음
end
-- 올바른 예
function calculateArea(length, width)
return multiply(length, width) -- 재사용
end
함수를 재사용하지 않으면 코드가 중복되어 유지보수가 어려워집니다.
6. 정리
다음에 학습하면 좋은 주제는 비동기 프로그래밍입니다. 이를 통해 이벤트 기반의 프로그래밍을 이해하고, 더욱 효율적인 코드를 작성할 수 있습니다.