안녕하세요!
오늘은 파이썬의 사용자 정의 함수, 콜백과 람다, class까지 공부해 보도록 하겠습니다.😉
◻️1. 사용자 정의 함의
사용자가 특정 작업을 수행하기 위해 직접 작성한 함수이다.
파이썬에는 많은 내장 함수들이 있지만, 사용자(개발자)의 요구사항에 맞게 동작하는 함수를 직접 사용해야 될 때도 있다.
def 함수명(매개변수1, 매개변수2, ...):
# 함수 내용
return 결과값 # 필요에 따라 사용
1. 매개변수와 반환 값이 없는 함수
def func1():
print('처음으로 만드는 함수!')
func1()
# 반복문 사용
for i in range(5):
func1()
2. 매개 변수가 있고 반환 값이 없는 함수
def func2(num): # func2를 함수를 호출할 때 매개변수를 넣어줘야 한다.
print(f'입력받은 숫자: {num}')
def func3(start, end): # 파이썬은 타입등을 알 수 없음
sum = 0
for i in range(start, end+1):
sum += i
print(f'{start}부터 {end}까지의 합: {sum}')
func3(5, 10)
3. 반환 값이 있는 함수
temp = func1()
print(temp) # print()하고 반환 할 값이 없기 때문에 None을 호출한다.
temp = func1 # 변수처럼 ()가 없을 때,
print(temp) # 함수의 주소가 나옴
temp() # 가리키는 주소가 있으니 temp()로 함수 호출 가능
# 이것과 같은 원리
num1 = 10
num2 = num1
4. 기본값이 설정된 매개변수
5. 가변 매개변수
함수를 호출할 때 * 를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 위치 인자로 풀어서 전달 가능.
6. 키워드 매개 변수
키워드 매개 변수는 일반적으로 기본값이 설정된 매개변수와 함께 사용된다.
매개변수에 기본값을 설정하면 함수를 호출할 때 매개변수를 생략할 수 있다.
7. 여러 개의 반환 값
여러 개의 변수에 각각의 값을 반환 할 수 있다.
하지만 변수를 많이 만들면 그 만큼의 메모리를 많이 사용한다는 뜻이기도 하다.
_, _, result3. _ = func10(10, 3)
print(f'곱셈: {result3}')
# 필요 없는 값엔 _ 를 사용하면 된다.
# print(_) 를 입력하면 데이터상 마지막 데이터의 값이 출력된다. 예) 3.33333...
☑️ enumerate 함수
파이썬의 내장 함수이며, 반복 가능한 객체(리스트, 튜플, 문자열 등)를 입력받아, key와 value를 한 쌍으로 묶어 반환한다.
8. 메모리 제거
함수도 파이썬 객체이므로 참조 카운팅과 가비지 컬렉션 원칙에 따라 동작한다.

함수를 참조하는 변수나 요소가 없게 되면, 함수는 메모리에서 제거될 수 있다. del명령어를 사용해 명시적으로 제거할 수 있다.
def func1():
함수 내용
return
# del 사용한 함수 제거
del fun1()
◽9. None의 특징
None는 파이썬에서 특별한 값, 아무런 값이 없음을 표현하는데 사용.
파이썬의 내장 상수이며, 데이터 타입이 NoneType 이다.
모든 None 은 동일하며, 두 개의 None를 비교할 땐 항상 True를 반환한다.
def my_function(x):
if x > 10:
return x
# x가 10 이하일 때는 아무런 값도 반환하지 않습니다. 실제로는 None이 반환됩니다.
def hello(message=None):
if message is None: # 객체의 주소랑 비교를 하기 때문에 is
print("Hello!")
else:
print(message)◻️2. 범위
변수의 범위(scope)는 해당 변수가 프로그램 내에서 참조되고 변경될 수 있는 영역을 의미한다.
- 1. 지역(Local) 범위
- 2. 함수 내부의 블록(Enclosing) 범위
- 3. 전역(Global) 범위
- 4. 내장 범위(Built-in)
1. 지역범위(local)
가장 내부의 범위, '함수 내에서 정의된 변수' 들이 해당된다. 함수 내에서만 접근할 수 있다.
def local_example():
local_var = "로컬 변수"
print(local_var)
local_example()
2. 함수 내부의 블록 범위
중첩된 함수 내부에서, 바깥쪽 함수의 변수들을 의미한다.
중첩 함수가 바깥 함수의 변수를 사용할 수 있게 해 준다.
def outer_function():
enclosing_var = "둘러싼 범위 변수" # 2번
def inner_function():
print(enclosing_var) # 4번
inner_function() # 3번
outer_function() # 1번 호출 순서
3. 전역범위(Global)
가장 바깥쪽에서 사용되는 범위로, '함수 외부에 정의된 변수'가 해당된다.
모든 함수에서 접근할 수 있지만, 함수 내부에서 수정하려면 global 키워드가 필요.
global_var = "I'm a global variable"
def test_global_scope():
global global_var
global_var = "변경할 값"
test_global_scope()
print(global_var)
4. 내장 범위(Built-in)
파이썬이 기본적으로 제공하는 내장 함수나, 예외들이 있는 범위이다.
예로 print(), len() 등이 해당된다.
len = 5 # 내장 함수 'len'을 덮어씀
print(len([1, 2, 3])) # 오류 발생! len이 함수가 아니라 변수로 인식됨◻️3. 콜백함수(Callback Function)
다른 함수에 인수로 전달되어 특정 작업이 끝난 후 호출되는 함수.
어떤 작업이 완료된 후 자동으로 호출되도록 미리 준비해 둔 함수이다. 직접 호출하지 않고, 특정 조건이 발생 시 실행되도록 설정.
◻️4. 람다(Lambda Function)
익명의 간단한 함수를 생성하기 위한 특별한 구문이다.
"익명의 함수"라는 것은 함수에 고유한 이름이 지정되지 않았음을 의미.
일반적인 def함수와 달리, 한 줄로 표현되는 간결한 함수를 생성할 때 사용된다.
lambda 매개변수: 표현식
◽4-1. 람다가 유용하게 사용되는 대표적인 함수
1. filter 함수
filter()는 주어진 함수의 조건을 만족하는 항목만으로 이루어진 이터레이터를 반환한다.
주로 리스트나 다른 순차적인 데이터 타입에서 특정 조건을 만족하는 항목들을 필터링할 때 사용한다.
2. map 함수
map() 은 주어진 함수를 이터러블의 모든 항목에 적용하여 결과를 반환하는 이터레이터를 생성한다.
주로 리스트나 다른 순차적인 데이터 타입의 항목 각각에 함수를 적용할 때 사용한다.
map() 함수는 결과를 이터레이터 형태로 반환하기 때문에 그 결과를 직접 출력하거나, 인덱싱 하거나, 슬라이싱 하기 위해서는 list()나 비슷한 함수를 사용하여 이터레이터를 실제 리스트나 다른 데이터 구조로 변환해야 합니다.

◻️5. 프로그래밍 방법론

5-1. 궁금해서 찾아본 자료
1) 절차적 프로그래밍 예시
- 대표 언어: C, Pascal, FORTRAN, BASIC
- 특징: 이 언어들은 데이터를 처리하는 '절차'와 '함수'를 순서대로 호출하는 방식으로 프로그램을 만듭니다.
- 프로그램 예:
- 운영체제 커널: 리눅스(Linux)나 윈도우(Windows)의 핵심 부분(커널)은 C언어로 작성되어, 하드웨어를 직접 제어하고 작업을 순서대로 처리하는 데 최적화되어 있습니다.
- 임베디드 시스템: 냉장고, 세탁기, 프린터 등에 들어가는 펌웨어(firmware)는 C언어를 사용해 정해진 절차대로만 동작하도록 만드는 경우가 많습니다.
2) 객체지향 프로그래밍 (OOP) 예시
- 대표 언어: Java, Python, C++, C#, Swift, Ruby
- 특징: 이 언어들은 '데이터'와 '기능(메서드)'을 하나의 '객체'로 묶어 관리하는 데 특화되어 있습니다.
- 프로그램 예:
- 대부분의 최신 애플리케이션:
- 웹 프레임워크: Python의 Django/Flask, Java의 Spring 등은 웹사이트의 기능(사용자, 게시물, 댓글 등)을 객체로 만들어 관리합니다.
- 모바일 앱: Swift(iOS)나 Kotlin(Android)을 사용한 앱 개발 시, 화면의 버튼, 텍스트 필드, 사용자 정보 등을 모두 객체로 다룹니다.
- 게임 엔진: Unity(C#)나 Unreal Engine(C++)에서는 플레이어, 적, 아이템 등을 모두 속성(체력, 공격력)과 기능(이동, 공격)을 가진 객체로 만듭니다.
- 대부분의 최신 애플리케이션:
3) 함수형 프로그래밍 예시
- 대표 언어:
- 순수 함수형 언어: Haskell, Lisp, Erlang, Clojure, Elm
- 함수형 스타일을 지원하는 언어: Python, JavaScript, Java (8버전 이상), Scala, Kotlin
- 특징: 데이터 처리를 map, filter, reduce 같은 함수들의 조합으로 해결하려 합니다.
- 프로그램 예:
- 데이터 분석 및 처리: Python의 Pandas 라이브러리나 R 언어는 대용량 데이터를 map (일괄 적용), filter (조건 필터링) 같은 함수형 스타일로 처리하는 데 매우 효과적입니다.
- 통신 및 동시성 처리: Erlang 언어는 통신 시스템(예: WhatsApp 메신저 초기 버전)에서 수많은 동시 접속을 오류 없이 안정적으로 처리하기 위해 함수형으로 설계되었습니다.
- 웹 프런트엔드: React.js (JavaScript 라이브러리)는 UI를 '상태(state)를 입력받아 UI(view)를 반환하는 함수'로 보는 함수형 프로그래밍 개념에 크게 영향을 받았습니다. (특히 map을 사용해 목록을 렌더링하는 부분)
◻️6. 클래스
class 키워드를 사용해 클래스를 정의한다.
관례적으로 대문자로 시작하는 것이 좋다. 클래스 내부에는 속성(멤버 변수), 메서드(멤버 함수)를 정의할 수 있다.
class 클래스이름:
# 클래스 속성(멤버 변수) 정의
속성1 = 초기값1
속성2 = 초기값2
# 생성자 메서드 (생략 가능)
def __init__(self, 매개변수1, 매개변수2, ...):
# 인스턴스 속성 초기화
self.속성1 = 매개변수1
self.속성2 = 매개변수2
# 메서드(멤버 함수) 정의
def 메서드1(self, 매개변수1, 매개변수2, ...):
# 메서드 동작 정의
pass
def 메서드2(self, 매개변수1, 매개변수2, ...):
# 메서드 동작 정의
pass
◽6-1. 객체(인스턴스) 생성
◽6-2. 클래스 변수
클래스에 속하는 변수로, 클래스가 생성될 때 정의되며 그 클래스로 만들어진 모든 객체들이 공유하는 변수.
클래스명으로 직접 접근하거나 인스턴스(객체) 명으로 접근할 수 있지만, 모든 인스턴스가 같은 메모리 공간을 참조하기
때문에 한 인스턴스 값을 변경하면 다른 인스턴스도 값이 변경됨.
=> 그래서 주로 전체 객체에 공통적인 속성을 저장할 때 사용한다.
◽6-3. 생성자
인스턴스가 생성될 때 자동으로 호출되는 메서드.객체의 초기화를 담당하며, 파이썬에선 __init__라고 생성자 이름이 정해져 있다.속성은 self를 사용하여 접근하고 설정한다. => 초기화된 속성은 객체가 생성될 때마다 다른 값을 가질 수 있다.
인스턴스 변수란?
인스턴스 변수는 각 인스턴스(객체)마다 별도로 생성되는 변수로, 객체를 만들 때마다 self 키워드를 통해 생성자(init 메서드)에서 정의되며, 각 객체가 고유한 값을 따로 저장합니다. 인스턴스 변수는 인스턴스명으로만 접근 가능하며, 다른 인스턴스에 영향을 주지 않고 자신만의 데이터를 가질 수 있어 객체마다 다른 속성값을 저장할 때 사용됩니다.
class 클래스이름:
def __init__(self, 매개변수1, 매개변수2):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
☑️추가 메모
self: 인스턴스 자기 자신
rucy = Dog(): Dog 설계도로 rucy라는 새로운 인스턴스를 만드는 과정
◽6-4. 메서드 타입
1. 인스턴스 메서드(Instance Method)
객체의 상태를 조작하거나 객체에 특정 작업을 수행하는 메서드입니다. 대부분의 클래스 메서드는 인스턴스 메서드입니다. init 메서드도 인스턴스 메서드입니다.
2. 클래스 메서드(Class Method)
클래스 레벨에서 동작하며, 모든 인스턴스가 공유하는 메서드입니다. 클래스 메서드는 @classmethod 데코레이터를 사용하여 정의하며, 첫 번째 매개변수로 cls를 사용합니다.
3. 정적 메서드(Static Method)
특정 클래스나 인스턴스와 관련이 없는 메서드로, 클래스 내부에 정의되어 있지만 클래스나 인스턴스와 독립적으로 호출될 수 있습니다. 정적 메서드는 @staticmethod 데코레이터를 사용하여 정의합니다.
마무리
저는 class 부분이 많이 어려웠기 때문에 오늘 시간을 많이 투자한 거 같습니다...
문제를 많이 풀어보면서 이해를 해봐야 될 거 같아요!!
'개념 정리 step1 > Python 기초' 카테고리의 다른 글
| Python(7) | 파일 입출력, 타입 어노테이션, 클로저, 데코레이터, 모듈 (0) | 2025.10.29 |
|---|---|
| Python(6) | 상속, 스페셜 메서드, 예외처리 (0) | 2025.10.27 |
| Python(4) | 제어문(조건문, 반복문), 문제 풀이 (0) | 2025.10.24 |
| Python(3) | 컬렉션 타입 (list, tuple, dict, set), input(), 연산자 (0) | 2025.10.22 |
| Python(2) | 변수, 문자열 다루기 (0) | 2025.10.21 |