프로그래밍 기초 심화: 함수와 스코프 이해하기
프로그래밍을 배우다 보면 꼭 마주치는 개념이 있습니다. 바로 함수(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
재귀를 쓸 때는 반드시 종료 조건을 넣어야 합니다.
마무리
정리하자면,
- 함수는 코드를 효율적으로 재사용하게 해주는 도구다.
- 스코프는 변수의 유효 범위를 정하는 규칙이다.
- 전역 변수는 최소화하고, 매개변수와 반환값으로 데이터 전달을 습관화하는 것이 좋다.
- 중첩 함수, 클로저, 재귀 함수는 함수를 더 깊이 이해하고 활용할 수 있게 해준다.
함수와 스코프는 프로그래밍에서 단순한 기초처럼 보이지만, 실제 프로젝트로 갈수록 중요성이 커집니다. 기초 단계에서 확실히 이해해 두면 이후 객체지향 프로그래밍이나 고급 주제를 배울 때 큰 도움이 될 것입니다.
댓글
댓글 쓰기