함수 조합하기
변환을 연결해 보세요.
함수 조합하기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
함수 합성이란
함수 합성은 두 함수를 하나로 결합합니다. 합성된 함수는 입력을 첫 번째 함수에 전달한 다음 그 결과를 두 번째 함수에 넘깁니다.
수학에서는 이를 f(g(x))로 나타냅니다. 함수 합성을 사용하면 작고 집중된 함수들로 큰 변환을 만들 수 있습니다.
두 함수 합성하기
compose 도우미는 두 함수를 받아 새로운 함수를 반환합니다. 이를 호출하면 먼저 g를 실행한 다음 그 결과를 f에 전달합니다.
순서가 중요합니다. 내부 함수가 먼저 실행되고, 외부 함수는 그 출력에 대해 실행됩니다.
local function compose(f, g)
return function(x)
return f(g(x))
end
end
local function inc(n) return n + 1 end
local function dbl(n) return n * 2 end
local incThenDouble = compose(dbl, inc)
print(incThenDouble(3))순서가 중요합니다
인수의 순서를 바꾸면 결과가 달라집니다. compose(f, g)는 먼저 g를 적용한 다음 f를 적용한다는 뜻입니다.
아래 예제에서는 두 배로 만든 다음 증가시키는 결과가, 증가시킨 다음 두 배로 만드는 결과와 다르다는 것을 보여 줍니다.
local function compose(f, g) return function(x) return f(g(x)) end end
local function inc(n) return n + 1 end
local function dbl(n) return n * 2 end
print(compose(dbl, inc)(3))
print(compose(inc, dbl)(3))문자열 함수 합성하기
함수 합성은 문자열 변환을 포함해 모든 단일 인수 함수에서 작동합니다. 다듬기, 대소문자 변환 또는 뒤집기를 하나의 재사용 가능한 단계로 연결할 수 있습니다.
여기서는 reverse가 먼저 실행되고 upper가 다음에 실행되어, 대문자로 변환된 뒤집힌 문자열을 만듭니다.
local function compose(f, g) return function(x) return f(g(x)) end end
local shout = compose(string.upper, string.reverse)
print(shout("lua"))여러 함수 합성하기
두 개보다 많은 함수를 연결하려면 가변 인수를 받는 composeAll을 작성합니다. 중첩 호출과 마찬가지로 오른쪽에서 왼쪽 순서로 함수를 적용합니다.
반복문은 함수 목록을 뒤에서부터 순회하며 각 함수를 통해 값을 차례로 전달합니다.
local function composeAll(...)
local fns = {...}
return function(x)
for i = #fns, 1, -1 do
x = fns[i](x)
end
return x
end
end
local f = composeAll(function(n) return n + 1 end,
function(n) return n * 2 end,
function(n) return n - 3 end)
print(f(10))오른쪽에서 왼쪽으로
composeAll(a, b, c)에서는 가장 오른쪽 함수인 c가 먼저 실행되고, 그다음 b, a가 실행됩니다. 이는 중첩 형태인 a(b(c(x)))와 같습니다.
순서를 읽기가 어려울 수 있으므로, 어떤 사람들은 대신 왼쪽에서 오른쪽으로 읽는 파이프를 선호합니다.
왼쪽에서 오른쪽으로 연결하기
pipe는 읽는 순서를 반대로 합니다. 함수가 작성된 순서대로 왼쪽에서 오른쪽으로 실행됩니다. 많은 사람이 데이터 파이프라인에서는 이 방식이 더 따라가기 쉽다고 생각합니다.
반복문은 앞에서부터 순회하며 현재 값에 각 함수를 적용합니다.
local function pipe(...)
local fns = {...}
return function(x)
for i = 1, #fns do
x = fns[i](x)
end
return x
end
end
local process = pipe(function(n) return n + 1 end,
function(n) return n * 2 end)
print(process(5))가독성을 위한 파이프
pipe를 사용하면 단계가 실행 순서대로 위에서 아래로 읽힙니다. 따라서 여러 단계의 변환 과정을 코드만 보고도 이해할 수 있습니다.
여기서는 문자열에서 접두사 부분을 잘라 내고, 소문자로 변환한 다음, 뒤집습니다. 각 단계가 실행되는 순서대로 나열되어 있습니다.
local function pipe(...) local fns={...} return function(x) for i=1,#fns do x=fns[i](x) end return x end end
local transform = pipe(string.lower, string.reverse,
function(s) return "[" .. s .. "]" end)
print(transform("LUA"))클로저를 활용한 함수 합성
부분 적용이나 클로저로 만든 함수도 합성할 수 있습니다. 작고 특화된 함수를 만든 다음 서로 연결해 보세요.
이렇게 하면 각 부분을 테스트할 수 있고, 합성을 통해 전체 흐름을 표현할 수 있습니다.
local function pipe(...) local fns={...} return function(x) for i=1,#fns do x=fns[i](x) end return x end end
local function adder(n) return function(x) return x + n end end
local function muller(n) return function(x) return x * n end end
local calc = pipe(adder(3), muller(10))
print(calc(2))함수 합성과 파이프라인
함수 합성은 데이터 파이프라인을 연결하는 역할을 합니다. 호출을 깊게 중첩하는 대신 합성된 함수에 한 번 이름을 붙이고 여러 입력에 적용할 수 있습니다.
이는 map과 함께 사용할 때 특히 효과적입니다. 합성된 함수를 각 항목에 적용할 변환 함수로 전달하면 됩니다.
local function map(t, f) local o={} for i,v in ipairs(t) do o[i]=f(v) end return o end
local function compose(f, g) return function(x) return f(g(x)) end end
local step = compose(function(n) return n + 1 end, function(n) return n * n end)
local r = map({1, 2, 3, 4}, step)
print(table.concat(r, ", "))함수를 작게 유지하기
함수 합성은 작고 단일 목적을 가진 함수에 적합합니다. 각 함수가 한 가지 작업만 수행하므로, 로직을 다시 작성하지 않고도 여러 함수를 결합해 복잡한 동작을 만들 수 있습니다.
이것이 함수형 설계의 핵심입니다. 작은 함수들로 어휘를 구성한 다음 합성하여 더 큰 개념을 표현합니다.
빠른 확인
답하기 전에 실행 순서를 주의 깊게 따라가 보세요.
복습
함수 합성은 한 함수의 출력이 다음 함수의 입력으로 전달되도록 함수들을 결합합니다. compose(f, g)는 오른쪽에서 왼쪽으로 g를 실행한 다음 f를 실행하고, pipe는 가독성을 위해 왼쪽에서 오른쪽으로 실행합니다.
composeAll과 pipe를 사용하면 작은 함수들을 여러 개 연결해 명확한 파이프라인을 만들 수 있으며, map과 함께 사용하면 특히 강력합니다.
자주 묻는 질문
“함수 조합하기” 강의는 무료인가요?
네 — “함수 조합하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“함수 조합하기”에서 뭘 배우나요?
변환을 연결해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“함수 조합하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.