프로그래밍 기초 심화: 함수와 스코프 이해하기

 프로그래밍을 배우다 보면 꼭 마주치는 개념이 있습니다. 바로 함수(Function)와 스코프(Scope)입니다. 함수는 코드를 효율적으로 묶어 재사용성을 높이는 도구이고, 스코프는 변수가 살아 있는 범위를 정해주는 규칙입니다. 이번 글에서는 이 두 가지를 조금 더 깊게 알아보겠습니다.





1. 함수란 무엇일까?



함수는 특정 작업을 수행하는 코드 묶음입니다. 예를 들어 두 수를 더하는 함수를 만든다고 할 때는 다음과 같이 작성합니다.


예시 코드 (텍스트 그대로 복사 가능):


def add_numbers(a, b):

  return a + b


print(add_numbers(3, 5))   # 결과: 8





2. 매개변수와 반환값



함수는 입력(매개변수)을 받아서 결과(반환값)를 돌려줍니다.


예시:


def circle_area(radius):

  return 3.14 * radius * radius


print(circle_area(5))   # 결과: 78.5


여기서 radius는 함수가 받는 매개변수이고, return 뒤의 값이 함수가 돌려주는 결과입니다.





3. 지역 변수와 전역 변수



스코프란 변수가 어디까지 살아서 사용할 수 있는지를 정하는 규칙입니다.


예시:


x = 10   # 전역 변수


def my_func():

  x = 5   # 지역 변수

  print(“함수 안:”, x)


my_func()

print(“함수 밖:”, x)


실행 결과는

함수 안: 5

함수 밖: 10

이렇게 됩니다. 함수 안과 밖의 x는 서로 다른 변수라는 점을 알 수 있습니다.





4. 전역 변수 사용 시 주의할 점



전역 변수를 함수 안에서 수정하려면 global 키워드를 써야 합니다. 하지만 이렇게 하면 프로그램이 커질수록 어디서 값이 바뀌었는지 추적하기 힘들어집니다.


예시:


count = 0


def increase():

  global count

  count += 1


increase()

increase()

print(count)   # 결과: 2


가능하다면 전역 변수보다는 함수의 매개변수와 반환값을 활용하는 것이 더 안전합니다.





5. 중첩 함수와 클로저



함수 안에 또 다른 함수를 넣을 수 있습니다. 이를 중첩 함수라고 합니다.


예시:


def outer():

  msg = “Hello”


  def inner():

    print(msg)


  return inner


fn = outer()

fn()   # 결과: Hello


여기서 inner 함수는 outer 함수 안의 msg 변수를 기억합니다. 이렇게 자신을 둘러싼 함수의 변수를 기억하는 함수를 클로저라고 부릅니다.





6. 재귀 함수



재귀 함수는 자기 자신을 다시 호출하는 함수입니다.


예시:


def factorial(n):

  if n == 1:

    return 1

  else:

    return n * factorial(n - 1)


print(factorial(5))   # 결과: 120


재귀를 쓸 때는 반드시 종료 조건을 넣어야 합니다.





마무리



정리하자면,


  • 함수는 코드를 효율적으로 재사용하게 해주는 도구다.
  • 스코프는 변수의 유효 범위를 정하는 규칙이다.
  • 전역 변수는 최소화하고, 매개변수와 반환값으로 데이터 전달을 습관화하는 것이 좋다.
  • 중첩 함수, 클로저, 재귀 함수는 함수를 더 깊이 이해하고 활용할 수 있게 해준다.



함수와 스코프는 프로그래밍에서 단순한 기초처럼 보이지만, 실제 프로젝트로 갈수록 중요성이 커집니다. 기초 단계에서 확실히 이해해 두면 이후 객체지향 프로그래밍이나 고급 주제를 배울 때 큰 도움이 될 것입니다.

프로그래밍을 배우다 보면 꼭 마주치는 개념이 있습니다. 바로 함수(Function)와 스코프(Scope)입니다. 함수는 코드를 효율적으로 묶어 재사용성을 높이는 도구이고, 스코프는 변수가 살아 있는 범위를 정해주는 규칙입니다. 이번 글에서는 이 두 가지를 조금 더 깊게 알아보겠습니다.





1. 함수란 무엇일까?



함수는 특정 작업을 수행하는 코드 묶음입니다. 예를 들어 두 수를 더하는 함수를 만든다고 할 때는 다음과 같이 작성합니다.


예시 코드 (텍스트 그대로 복사 가능):


def add_numbers(a, b):

  return a + b


print(add_numbers(3, 5))   # 결과: 8





2. 매개변수와 반환값



함수는 입력(매개변수)을 받아서 결과(반환값)를 돌려줍니다.


예시:


def circle_area(radius):

  return 3.14 * radius * radius


print(circle_area(5))   # 결과: 78.5


여기서 radius는 함수가 받는 매개변수이고, return 뒤의 값이 함수가 돌려주는 결과입니다.





3. 지역 변수와 전역 변수



스코프란 변수가 어디까지 살아서 사용할 수 있는지를 정하는 규칙입니다.


예시:


x = 10   # 전역 변수


def my_func():

  x = 5   # 지역 변수

  print(“함수 안:”, x)


my_func()

print(“함수 밖:”, x)


실행 결과는

함수 안: 5

함수 밖: 10

이렇게 됩니다. 함수 안과 밖의 x는 서로 다른 변수라는 점을 알 수 있습니다.





4. 전역 변수 사용 시 주의할 점



전역 변수를 함수 안에서 수정하려면 global 키워드를 써야 합니다. 하지만 이렇게 하면 프로그램이 커질수록 어디서 값이 바뀌었는지 추적하기 힘들어집니다.


예시:


count = 0


def increase():

  global count

  count += 1


increase()

increase()

print(count)   # 결과: 2


가능하다면 전역 변수보다는 함수의 매개변수와 반환값을 활용하는 것이 더 안전합니다.





5. 중첩 함수와 클로저



함수 안에 또 다른 함수를 넣을 수 있습니다. 이를 중첩 함수라고 합니다.


예시:


def outer():

  msg = “Hello”


  def inner():

    print(msg)


  return inner


fn = outer()

fn()   # 결과: Hello


여기서 inner 함수는 outer 함수 안의 msg 변수를 기억합니다. 이렇게 자신을 둘러싼 함수의 변수를 기억하는 함수를 클로저라고 부릅니다.





6. 재귀 함수



재귀 함수는 자기 자신을 다시 호출하는 함수입니다.


예시:


def factorial(n):

  if n == 1:

    return 1

  else:

    return n * factorial(n - 1)


print(factorial(5))   # 결과: 120


재귀를 쓸 때는 반드시 종료 조건을 넣어야 합니다.





마무리



정리하자면,


  • 함수는 코드를 효율적으로 재사용하게 해주는 도구다.
  • 스코프는 변수의 유효 범위를 정하는 규칙이다.
  • 전역 변수는 최소화하고, 매개변수와 반환값으로 데이터 전달을 습관화하는 것이 좋다.
  • 중첩 함수, 클로저, 재귀 함수는 함수를 더 깊이 이해하고 활용할 수 있게 해준다.



함수와 스코프는 프로그래밍에서 단순한 기초처럼 보이지만, 실제 프로젝트로 갈수록 중요성이 커집니다. 기초 단계에서 확실히 이해해 두면 이후 객체지향 프로그래밍이나 고급 주제를 배울 때 큰 도움이 될 것입니다.


댓글

이 블로그의 인기 게시물

게임 UX와 뇌과학: 몰입형 인터페이스 설계

클라우드 게임 스트리밍 기술 해부

대규모 Crowd Simulation 알고리즘 연구