프로그래밍 개발 공부

[Python 학습] 1-9 "함수는 대체 왜 등장한 걸까?" 코딩 초보가 헷갈리는 핵심 개념 정리

wikys 2026. 5. 11. 10:32
파이썬 기초를 공부하면서 가장 헷갈렸고, 또 프로그래밍의 뼈대가 된다고 느낀 개념이 바로 '함수(Function)'다. 처음에는 그저 '자주 쓰는 코드를 묶어두는 문법' 정도로만 생각했는데, 깊게 파고들수록 왜 함수가 프로그래밍에서 필수적인 구조인지 깨닫게 되었다. 오늘은 내가 학습한 자료들을 바탕으로 함수는 왜 등장하는가에 대한 근본적인 이유와 핵심 개념들을 나를 위해 정리해 본다.

--------------------------------------------------------------------------------

1. 단순한 복붙을 넘어, '기능 단위'로 책임을 나누기 위해
프로그램의 규모가 조금만 커져도 똑같은 코드가 여러 번 반복해서 쓰이는 경우가 생긴다. 예를 들어 사용자에게 인사 메시지를 출력하거나, 쇼핑몰에서 배송비를 계산하는 작업은 여러 곳에서 재사용될 확률이 높다. 이때 같은 코드를 계속 복사해서 붙여넣기(복붙)를 한다면 어떻게 될까? 당장 코드의 길이가 끝도 없이 길어질 뿐만 아니라, 나중에 수정 사항이 생겼을 때 복붙한 모든 곳을 일일이 찾아 고쳐야 하므로 실수가 늘어날 수밖에 없다.
이러한 문제를 해결하는 소프트웨어 설계 원칙 중 DRY(Don't Repeat Yourself) 원칙이 있다. 똑같은 코드를 반복하지 말고 재사용성을 높이라는 뜻이다. 함수는 특정 작업을 하나의 이름 아래 묶어두어, 필요한 순간마다 그 기능을 다시 실행할 수 있게 해준다.
하지만 내가 여기서 새롭게 깨달은 것은, 함수가 단순히 코드 줄 수를 줄여주는 도구에 그치지 않는다는 점이다. 함수는 코드를 '기능 단위'로 분리하여 책임을 나누는 구조다.. "회원 등급 계산", "파일 정리" 등 명확한 역할을 기준으로 함수를 쪼개어(단일 책임 원칙) 작성하면, 나중에 코드를 유지보수하고 테스트하기가 훨씬 쉬워진다.

--------------------------------------------------------------------------------

2. 입력을 받아 결과를 반환하는 '블랙박스(Black Box)'
함수의 또 다른 본질은 '어떤 값을 받아 처리한 뒤 새로운 결과를 만들어 내는 구조'라는 것이다. 서강대학교 강의 자료에 따르면 함수는 일종의 **블랙박스(black box)**와 같다. 주어진 입력(매개변수)이 들어가면 내부에서 어떤 연산을 거쳐 결과(출력)가 나오는지 복잡한 과정은 캡슐화되어 숨겨지기 때문이다.
이해하기 쉬운 비유로 자판기나 계산기가 있다. 자판기에 동전과 버튼(입력)을 넣으면 음료수(결과)가 나오는 것처럼, 파이썬의 함수 역시 def add(a, b): return a + b와 같이 뼈대를 만들어두면 입력값이 달라질 때마다 동일한 규칙으로 다른 결과를 변환해 준다. 이렇게 입력을 받는 구조 덕분에 함수는 더욱 유연하고 재사용성이 높아진다.

--------------------------------------------------------------------------------

3. 학습 중 가장 헷갈렸던 부분 : 정의 vs 호출, 그리고 print와 return
내가 함수를 공부하며 가장 크게 혼동했던 부분은 크게 두 가지였다.
첫째는 함수 정의(def)와 함수 호출(Call)의 차이다. def 키워드를 사용해 코드를 작성하는 것은 단지 '이러한 기능을 하겠다'라고 미리 설계(기능을 만드는 단계)를 해둔 것일 뿐, 그 자체로 코드가 실행되지는 않는다. 실제로 기능을 작동시키려면 필요한 순간에 함수명 뒤에 괄호를 붙여 '호출'해야 한다. 이때 파이썬 코딩 도장 자료를 보며 알게 된 사실은, 함수를 호출하면 메모리에 '스택 프레임(Stack Frame)'이라는 독립적인 공간이 생기고, 그 안에서 함수가 매개변수와 변수를 처리한 뒤 실행이 끝나면 프레임이 사라지는 방식으로 동작한다는 것이다.
둘째는 printreturn의 차이다. 입문자들이 정말 많이 하는 오해인데, 나 역시 화면에 값이 나오면 그것이 함수의 결과라고 착각했었다. print는 단순히 계산된 결과를 내 눈에 보이도록 화면에 띄워주는(출력) 기능일 뿐이다. 반면 return은 계산된 실제 결과값을 함수 바깥으로 돌려주는(반환) 역할을 한다. 만약 return 없이 print만 있는 함수를 변수에 저장하려 하면, 파이썬은 돌려받은 값이 없으므로 변수에 None을 저장해버린다. 함수의 결과를 다른 계산에 재사용하려면 무조건 return을 사용해야 한다는 것을 확실히 짚고 넘어갈 수 있었다.

--------------------------------------------------------------------------------

4. 함수 중심의 사고방식 : 코드를 읽는 관점의 변화
결론적으로 함수가 등장하게 된 배경과 그 원리를 학습하고 나니, 코드를 바라보는 나의 시야가 완전히 달라졌다. 예전에는 코드를 위에서부터 아래로 한 줄씩 따라가며 읽기 바빴다. 하지만 이제는 "이 블록은 로그인 처리 로직이구나", "이 부분은 금액을 계산하는 역할이구나"라며 프로그램을 기능 단위로 나누어 읽고 설계하는 사고방식이 생겼다.
이러한 모듈화된 사고는 복잡한 문제를 작은 단위로 분해해서 해결해 나가는 개발자의 핵심 역량이다. 함수는 그저 기초 문법 중 하나로 보이지만, 실제로는 구조화된 프로그래밍과 클린 코드로 나아가는 가장 중요한 출발점이었다. 이번에 기능 단위로 코드를 분리하는 감각을 확실히 잡았으니, 다음 단계로는 코드가 예상대로 동작하지 않을 때를 대비한 예외 처리나 객체 지향 프로그래밍에 대해 공부해 봐야겠다.
 

 
반응형