익명 함수
Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 13번째.
이제 함수가 변수에 저장되고 전달될 수 있다는 점을 이해하셨으므로, 함수를 작성하는 훨씬 더 간결한 방법이 있습니다. 항상 함수에 이름을 부여하는 대신, 필요한 곳에서 직접 함수를 생성할 수 있습니다. 이를 익명 함수(anonymous functions)라고 합니다.
익명 함수는 단순히 이름이 없는 함수입니다. function 키워드 뒤에 즉시 매개변수와 본문이 이어지는 형식을 사용하여 정의합니다:
function(a, b)
return a + b
end이것은 즉시 사용할 수 있는 함수 값을 생성합니다. 익명 함수는 함수를 다른 함수의 인자로 전달할 때 특히 유용합니다. 이전에 보았던 사용자 정의 정렬 예제를 기억하시나요? 익명 함수를 사용하면 다음과 같은 모습이 됩니다:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)비교를 위해 별도의 명명된 함수를 정의하는 대신, 함수가 table.sort()의 두 번째 인자로 직접 생성됩니다. 이렇게 하면 코드가 더 간결해지고 정렬 로직을 사용하는 위치에 바로 유지할 수 있습니다.
챌린지
쉬움numbers와 threshold를 인자로 받아 임계값(threshold)보다 큰 숫자들만 포함하는 새로운 테이블을 반환하는 filterByThreshold 함수를 작성하세요.
숫자를 필터링하기 위해 익명 함수 방식을 사용하여 table.insert()를 활용하세요. 별도의 명명된 함수를 정의하지 않고 인라인으로 필터링 로직을 만드세요.
로직:
- 비어 있는 결과 테이블을 생성합니다.
- numbers 테이블을 반복하여 탐색합니다.
- 각 숫자에 대해 익명 함수를 사용하여 임계값을 초과하는지 확인합니다.
- 확인 결과가 true이면 숫자를 결과 테이블에 추가합니다.
- 필터링된 결과 테이블을 반환합니다.
매개변수:
numbers(table): 숫자 값을 포함하는 리스트 스타일의 테이블threshold(number): 필터링을 위한 최소값 (해당 값 미포함)
반환값: 임계값보다 큰 숫자들만 포함하는 테이블 (table)
치트 시트
익명 함수(anonymous function)는 이름이 없는 함수로, function 키워드 뒤에 매개변수와 본문을 정의하여 사용합니다:
function(a, b)
return a + b
end익명 함수는 함수를 인자로 전달할 때 유용하며, 로직이 사용되는 곳에 인라인으로 유지할 수 있게 해줍니다:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)이렇게 하면 비교 함수를 table.sort()의 인자로 직접 생성하여 코드를 더 간결하게 만들 수 있습니다.
직접 해보기
function filterByThreshold(numbers, threshold)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.