함수

기술노트

함수 (Function)

함수(Function)는 특정 작업을 수행하도록 설계된 코드 블록입니다. 프로그램 내에서 반복되는 작업을 캡슐화하고, 코드의 재사용성, 모듈성, 가독성 및 유지보수성을 향상시키는 데 중요한 역할을 합니다.


🧱 함수의 주요 특징 및 중요성

  • 재사용성 : 동일한 코드를 여러 번 작성할 필요 없이 함수 호출을 통해 재사용할 수 있습니다.
  • 모듈화 : 코드를 논리적인 단위로 분리하여 관리하기 쉽게 만듭니다. 각 함수는 독립적인 기능을 수행하는 모듈이 됩니다.
  • 가독성 : 복잡한 로직을 작은 단위로 나누어 코드의 전체적인 이해를 돕습니다.
  • 유지보수 : 기능 변경 시 해당 함수만 수정하면 되므로 전체 코드에 미치는 영향을 최소화하고 유지보수 비용을 줄일 수 있습니다.

📞 함수 호출 방식

  • Call by Value (값에 의한 호출) : 함수 호출 시 인자의 '값'을 복사하여 전달합니다. 함수 내부에서 매개변수 값을 변경해도 원본 변수에는 영향을 주지 않습니다.
  • Call by Reference (참조에 의한 호출) : 함수 호출 시 인자의 '메모리 주소(참조)'를 전달합니다. 함수 내부에서 매개변수 값을 변경하면 원본 변수의 값도 변경됩니다.

🧠 함수와 메모리 구조

  • 스택 프레임 (Stack Frame) : 함수가 호출되면 스택 영역에 해당 함수의 스택 프레임이 생성됩니다. 이 프레임에는 함수의 매개변수, 지역 변수, 복귀 주소 등이 저장됩니다. 함수 호출이 완료되면 스택 프레임은 소멸됩니다.
  • 재귀 함수와 스택 오버플로우 :
    • 재귀 함수 : 함수가 자기 자신을 호출하는 형태의 함수입니다.
    • 스택 오버플로우 : 재귀 함수가 너무 깊게 호출되거나 무한 재귀에 빠질 경우, 스택 메모리 영역이 가득 차서 더 이상 스택 프레임을 할당할 수 없게 되어 발생하는 오류입니다.

💡 개발자 핵심 Point

  • 함수는 프로그래밍의 가장 기본적인 구성 요소 중 하나이며, 효율적이고 구조화된 코드를 작성하는 데 필수적입니다.
  • 단일 책임 원칙 (SRP) : 함수는 단 하나의 책임만 가져야 합니다. 이는 함수의 응집도를 높이고 결합도를 낮춰 유지보수를 용이하게 합니다.
  • 함수형 프로그래밍 패러다임에서는 함수를 일급 객체로 취급하며, 순수 함수, 불변성, 고차 함수 등의 개념을 통해 부수 효과를 최소화하고 예측 가능한 코드를 작성하는 것을 지향합니다.