[코딩 일기] 53세에 처음 쓴 함수(function)와의 3일간의 사투
핵심 요약: 53세에 처음으로 JavaScript 함수를 배우며 겪은 3일간의 실제 경험입니다. 오류 메시지에 당황하고, 괄호 하나 때문에 두 시간을 허비하고, 마침내 "아!" 하는 순간이 찾아오기까지의 이야기를 솔직하게 공유합니다.
1일 차: "함수가 뭔지는 알겠는데..."
퇴직 후 3개월째 JavaScript를 독학 중이었습니다. 변수, 조건문, 반복문은 어찌어찌 이해했는데, 드디어 함수 챕터에 도달했습니다. 강의 영상에서 강사가 "함수는 재사용 가능한 코드 묶음입니다"라고 설명하는데, 개념적으로는 이해가 됐습니다. 30년 넘게 매뉴얼 만들고 표준 프로세스를 정립하던 사람으로서 '재사용'이라는 개념 자체는 너무 익숙했으니까요.
문제는 직접 써보는 순간 시작됐습니다. 강의를 따라 처음으로 함수를 작성했습니다.
function greet(name) {
return "안녕하세요, " + name + "님!";
}
console.log(greet("김철수"));
실행하니 "안녕하세요, 김철수님!"이 출력됐습니다. "오, 됐네!" 싶었는데... 조금씩 변형해보자 바로 막혔습니다. 숫자 두 개를 더하는 함수를 만들려 했는데:
function add(a, b)
return a + b
}
console.log(add(3, 5));
SyntaxError: Unexpected token 'return'
첫 번째 오류를 마주쳤습니다. 한참을 들여다봤지만 뭐가 잘못됐는지 몰랐습니다. 눈에는 강의 코드와 똑같아 보였거든요. 1시간 후에야 발견했습니다. 여는 중괄호 { 를 빠뜨린 것이었습니다. 괄호 하나가 1시간을 잡아먹은 셈입니다.
2일 차: return의 의미를 오해하다
다음 날 더 어려운 벽을 만났습니다. '반환값(return value)'의 개념이었습니다. 강의에서 "함수는 값을 반환할 수도, 안 할 수도 있다"고 했는데, 실제로 어떤 의미인지 감이 안 왔습니다. 이런 코드를 짰습니다:
function calculateTax(price) {
let tax = price * 0.1;
console.log("세금: " + tax);
}
let result = calculateTax(10000);
console.log("결과: " + result);
"세금: 1000"은 잘 찍혔는데, "결과: undefined"가 함께 나왔습니다. 분명히 함수 안에서 계산을 했는데 왜 undefined가 나오는 걸까요?
이때 회계 업무 경력이 도움이 됐습니다. 함수를 직원에 비유해봤습니다. 직원(함수)에게 "세금 계산해서 화이트보드에 써놔"라고 지시한 것과 같았습니다. 직원은 화이트보드에 숫자를 썼지만(console.log), 나에게 직접 보고하지는 않은 거죠. 내가 필요한 건 직원이 나에게 직접 숫자를 건네주는(return) 것이었습니다.
function calculateTax(price) {
let tax = price * 0.1;
return tax; // ← 이제 값을 직접 건네준다
}
let result = calculateTax(10000);
console.log("결과: " + result); // 결과: 1000
이 비유를 찾아내는 데 오후 내내 걸렸지만, 한번 이해하고 나니 그 다음부터는 return을 잊어버린 적이 없었습니다. 50대의 강점은 이겁니다. 새 개념을 기존 경험에 연결시키는 능력.
3일 차: "아, 이게 함수구나!" 하는 순간
3일 차에는 스스로 작은 프로그램을 만들어보기로 했습니다. 목표는 하나: 함수를 3개 이상 써서 실용적인 것 만들기. 30년 회계 경력자답게 가장 익숙한 도메인인 부가세 계산기를 골랐습니다.
function calculateVAT(price) {
return price * 0.1;
}
function calculateTotal(price) {
let vat = calculateVAT(price);
return price + vat;
}
function printReceipt(itemName, price) {
let vat = calculateVAT(price);
let total = calculateTotal(price);
console.log("===== 영수증 =====");
console.log("품목: " + itemName);
console.log("공급가액: " + price + "원");
console.log("부가세(10%): " + vat + "원");
console.log("합계: " + total + "원");
console.log("==================");
}
printReceipt("노트북", 1200000);
실행하자 깔끔한 영수증이 출력됐습니다. 그 순간이었습니다. calculateVAT를 한 번만 만들어두니 다른 함수에서 가져다 쓸 수 있고, 나중에 부가세율이 바뀌면 딱 한 곳만 수정하면 된다는 게 피부로 느껴졌습니다.
30년 전 제가 만들었던 표준 업무 매뉴얼과 똑같은 원리였습니다. 자주 쓰는 프로세스를 한 번만 정리해두고, 필요할 때 가져다 쓰는 것. 함수는 코드 세계의 표준 매뉴얼이었습니다.
3일간의 사투에서 얻은 것들
오류 메시지는 적이 아니다
SyntaxError, undefined... 처음엔 무서웠지만 사실 가장 친절한 선생님입니다. "여기가 잘못됐어"라고 정확히 알려주니까요. 오류를 당황스럽게 보지 말고 단서로 보세요.
기존 경험을 적극 활용하라
return 개념을 직원 보고 비유로 이해한 것처럼, 내가 아는 세계와 연결하면 훨씬 빨리 이해됩니다. 50대의 두꺼운 경험이 약점이 아니라 강점입니다.
실용적인 예제로 만들어라
greet("홍길동") 같은 예제는 금방 지겨워집니다. 내 직업, 내 생활과 연관된 예제로 만들면 동기부여도 높고 기억에도 오래 남습니다.
✅ 함수 첫 걸음 도전 체크리스트
- 매개변수 1개짜리 간단한 함수 작성하기
- return이 있는 함수 vs 없는 함수 차이 직접 확인하기
- 내 직업/생활에서 반복되는 계산을 함수로 만들어보기
- 함수 3개를 서로 연결해서 사용해보기
✅ 오늘 바로 실천하기
- 본문의 핵심 개념 3가지 메모하기
- 15분 실습 시간 확보하기
- 다음 글 읽기 일정 잡기