본문 바로가기
지식을 알아가는 시간 지식을 알아가는 시간

함수(Function)란 무엇인가요? 자판기로 이해하는 개념 정리

읽는 시간 약 10분

자판기로 이해하는 함수의 기본 개념

우리가 일상에서 흔히 만나는 자판기는 프로그래밍에서 말하는 함수의 개념을 이해하기 좋은 비유입니다.

복잡한 수식이나 어려운 용어 때문에 함수라는 말만 들으면 머리가 아파 오는 분들이 많지만, 사실 함수는 우리 삶의 아주 가까운 곳에 늘 함께 있습니다.

자판기 앞을 상상해 보겠습니다. 자판기에는 동전을 넣는 투입구와 여러 개의 음료수 버튼이 있고, 버튼을 누르면 그에 맞는 음료수가 나옵니다. 이 과정을 그대로 함수에 대입해 볼 수 있습니다.

우리가 넣는 동전이나 누르는 버튼은 함수의 입력값이 되고, 자판기가 내어 주는 음료수는 결과값이 됩니다. 즉, 함수란 어떤 재료를 넣었을 때 정해진 규칙에 따라 특정한 결과를 돌려주는 것이라고 생각하면 됩니다.

함수의 핵심 요소를 자판기로 풀어내기

함수를 더 깊이 이해하기 위해 자판기의 구조를 조금 더 자세히 살펴보겠습니다. 함수를 이루는 핵심 요소들은 자판기의 부품에 하나씩 대응해 볼 수 있습니다.

  • 입력값은 자판기에 투입하는 돈이나 우리가 누르는 버튼을 의미합니다.
  • 출력값은 버튼을 눌렀을 때 실제로 나오는 콜라, 사이다, 물 같은 음료수를 뜻합니다.
  • 규칙은 자판기 내부의 복잡한 기계 장치로, 1번 버튼을 누르면 콜라가 나오도록 설계된 프로그램 그 자체입니다.

이 구조에서 가장 중요한 특징은 입력과 출력 사이의 일관성입니다. 정상적인 자판기라면 1번 버튼을 눌렀을 때 언제나 콜라가 나와야 합니다.

오늘 누르면 사이다가 나오고 내일 누르면 물이 나오는 자판기는 고장 난 자판기입니다. 함수도 마찬가지로, 다른 조건이 같다면 같은 입력값에는 같은 결과값이 나오도록 만드는 것이 기본 원칙입니다. 이 원칙이 지켜져야 결과를 미리 예측할 수 있고, 문제가 생겼을 때 원인을 찾기도 쉽습니다. 다만 현재 시간이나 무작위 숫자처럼 함수 바깥의 값을 함께 사용하는 경우는 예외인데, 이 내용은 아래 자주 묻는 질문에서 설명합니다.

파이썬 코드로 자판기 함수 만들어 보기

이제 자판기를 실제 파이썬 코드로 옮겨 보겠습니다. 파이썬에서는 def라는 단어로 함수를 만들고, 함수가 결과를 돌려줄 때는 return을 사용합니다. 아래 코드에서 button은 입력값, if 문은 규칙, return 뒤에 오는 음료 이름은 출력값에 해당합니다. 함수가 받는 입력값을 파이썬에서는 매개변수라고 부르고, vending_machine(1)처럼 함수를 사용하는 것을 호출한다고 말합니다.

def vending_machine(button):
    if button == 1:
        return "콜라"
    elif button == 2:
        return "사이다"
    elif button == 3:
        return "물"
    else:
        return "없는 버튼입니다"


print(vending_machine(1))
print(vending_machine(2))
print(vending_machine(1))
print(vending_machine(5))

이 코드를 실행하면 아래와 같이 출력됩니다. 1번 버튼을 두 번 눌렀을 때 콜라가 두 번 모두 나오는 것이 같은 입력에는 같은 결과가 나온다는 함수의 기본 원칙입니다.

콜라
사이다
콜라
없는 버튼입니다
터미널에서 vending.py 파일을 실행했을 때 콜라, 사이다, 콜라, 없는 버튼입니다가 차례로 출력된 화면

여기서 return과 print의 차이를 알아 두면 좋습니다. return은 함수가 만든 결과를 함수를 부른 곳으로 돌려주는 역할을 하고, print는 값을 화면에 보여 주기만 합니다. 함수가 return으로 값을 돌려줘야 그 값을 변수에 저장하거나 다른 계산에 다시 사용할 수 있습니다.

함수는 숫자 계산에도 그대로 쓸 수 있습니다. 쇼핑몰 장바구니처럼 상품 가격과 개수를 입력하면 합계를 돌려주는 함수를 만들어 보겠습니다. 이번에는 함수가 돌려준 값을 total이라는 변수에 저장한 뒤 출력합니다.


def total_price(price, count):
    return price * count

total = total_price(1500, 3)
print(total)
print(total_price(2000, 2))


이 코드를 실행하면 아래와 같이 출력됩니다. 1500원짜리 상품 3개의 합계인 4500이 return으로 돌아와 total에 저장되고, 2000원짜리 상품 2개의 합계인 4000은 저장 없이 바로 출력됩니다. 이처럼 입력값이 두 개여도 함수는 하나의 결과를 돌려줍니다.

4500
4000

일상과 실생활 속에서 작동하는 함수들

자판기 비유를 통해 함수의 기본을 이해했다면, 이제 우리 주변에 숨어 있는 다양한 함수들을 찾아볼 차례입니다. 생각보다 많은 일상 루틴이 함수 형태로 움직이고 있습니다.

  • 스마트폰 날씨 앱은 지역을 입력하면 현재 기온과 강수 확률을 보여 줍니다.
  • 내비게이션은 출발지와 목적지를 입력하면 예상 이동 경로와 시간을 계산해 줍니다.
  • 은행 자동화 기기(ATM)는 카드와 비밀번호를 입력하면 현재 잔액을 화면에 띄워 줍니다.
  • 온라인 쇼핑몰의 장바구니는 담긴 상품들의 가격을 모두 더해 최종 결제 금액을 산출합니다.

이처럼 우리가 디지털 기기를 사용할 때는 보이지 않는 곳에서 수많은 함수가 계산을 수행하고 있습니다. 입력이 들어가면 정해진 규칙을 거쳐 출력이 나온다는 흐름을 알아 두면, 새로운 도구나 프로그램을 배울 때 어떤 값을 넣고 무엇을 받는지 먼저 살펴보게 되어 이해하기가 한결 쉬워집니다.

함수를 바라보는 흔한 오해와 진실

함수에 대해 많은 사람들이 가지고 있는 오해들이 있습니다. 수학 시간에 접했던 기억 때문에 함수를 무조건 숫자를 대입해서 X값을 구하는 괴로운 과정으로만 생각하는 경우가 많습니다.

하지만 프로그래밍이나 실생활에서의 함수는 숫자에만 국한되지 않습니다. 사진 파일을 입력으로 넣으면 흑백 사진으로 바꿔 주는 이미지 편집 프로그램의 기능도 함수의 한 예입니다.

텍스트를 입력하면 맞춤법을 검사해 주는 기능도 함수입니다. 즉, 입력과 출력이 존재하고 그 사이에 명확한 규칙이 있다면 그것은 모두 함수라고 부를 수 있습니다.

또 다른 오해는 함수가 너무 복잡해서 전문가들만 다룰 수 있다는 생각입니다. 자판기를 이용할 때 내부 회로의 기판을 이해할 필요가 없는 것처럼, 우리는 함수를 만들거나 사용할 때도 전체 구조를 세세히 알기보다 입력과 출력이 무엇인지만 명확히 정의하면 됩니다. 내가 원하는 결과를 얻기 위해 어떤 재료를 넣어야 하는지만 알면 함수를 다루는 것은 그리 어렵지 않습니다.

효율적인 문제 해결을 위한 함수의 활용법

함수의 개념을 일상 업무나 학습에 적용해 보면 생각을 정리하는 데 도움이 됩니다. 함수적 사고란 복잡한 문제를 작은 단위로 쪼개고, 반복되는 작업을 입력과 출력으로 구조화해 보는 것을 의미합니다.

예를 들어 매일 작성해야 하는 보고서가 있다고 가정해 보겠습니다. 이 과정을 함수처럼 생각해 보면 구조가 잘 보입니다. 매일 수집하는 데이터가 입력값이 되고, 정해진 양식에 맞춰 글을 정리하는 과정이 규칙이며, 완성된 보고서가 출력값이 됩니다.

이 규칙을 매번 새로 만들지 않고 하나의 틀이나 템플릿으로 만들어 두면, 입력값만 바꿨을 때 곧바로 결과물을 얻을 수 있는 나만의 자판기를 만드는 셈이 됩니다.

업무를 자동화하거나 일상의 루틴을 정리할 때도 이런 생각이 도움이 됩니다. 반복되는 일에서 입력과 출력을 분리하고 그 사이의 규칙을 단순하게 정리해 두면, 같은 작업을 할 때마다 처음부터 고민하는 시간을 줄일 수 있습니다.

자주 묻는 질문으로 함수 개념 다지기

함수와 프로그램은 서로 어떻게 다른가요?

함수는 커다란 프로그램 속에서 특정한 역할을 맡는 작은 부분이라고 생각하면 이해하기 쉽습니다. 자판기 프로그램을 예로 들면 동전이 맞는지 확인하는 부분, 거스름돈을 계산하는 부분, 음료수를 내보내는 부분을 각각 하나의 함수로 만들 수 있습니다. 이 함수들이 모여서 자판기 프로그램 전체가 완성됩니다.

입력값이 같아도 다른 결과가 나올 수 있나요?

수학적인 엄격한 정의에 따르면 하나의 입력값에는 반드시 하나의 출력값만 대응되어야 합니다. 하지만 현실 세계의 프로그램에서는 시간에 따라 결과가 달라지는 함수도 존재합니다.

예를 들어 현재 시간을 알려 주는 함수는 지금 호출할 때와 1분 뒤에 호출할 때의 결과가 다릅니다. 무작위 숫자를 뽑는 함수도 호출할 때마다 결과가 달라집니다. 이런 함수는 시간이나 무작위 값처럼 눈에 보이지 않는 입력이 함께 작용하기 때문에 결과가 달라지는 것입니다. 그래서 앞에서 말한 원칙은 눈에 보이지 않는 입력까지 포함해서 입력이 모두 같다면 결과도 같다는 뜻으로 이해하면 됩니다.

함수를 잘 이해하려면 어떻게 연습해야 하나요?

주변의 기기나 서비스를 자판기처럼 바라보는 연습이 도움이 됩니다. 예를 들어 어떤 앱에서 버튼을 눌렀을 때 어떤 화면이 나오는지 보면서 입력과 출력을 짐작해 보는 것입니다.

익숙해지면 위의 파이썬 예제처럼 간단한 함수를 직접 만들어 보세요. 입력이 무엇인지, 규칙이 무엇인지, 어떤 결과를 돌려줄지 세 가지로 나누어 적은 다음 코드로 옮겨 보면 함수 개념이 훨씬 또렷해집니다.

여백
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.