프로그래밍을 배우는 과정에서, 특히 파이썬과 같은 언어를 처음 접할 때는 많은 개념들이 혼란스러울 수 있습니다. 아래는 파이썬의 10가지 개념을 쉽게 이해할 수 있도록 비유를 들어 설명하고, 각 개념에 대한 활용 예시와 코드를 포함하였습니다.
1. 가변 객체 vs 불변 객체
비유: 가변 객체는 마치 반죽을 가지고 있는 피자 도우와 같습니다. 반죽을 늘리거나 모양을 바꿀 수 있습니다. 반면, 불변 객체는 이미 구워진 피자와 같아서, 한 번 구워지면 그 모양을 바꿀 수 없습니다.
- 가변 객체: 리스트, 딕셔너리
- 불변 객체: 정수, 문자열, 튜플
예시 코드:
# 가변 객체 예시
my_list = [1, 2, 3]
my_list.append(4) # 리스트에 4 추가
print(my_list) # [1, 2, 3, 4]
# 불변 객체 예시
my_tuple = (1, 2, 3)
# my_tuple[1] = 4 # TypeError 발생
2. 기본 가변 인자
비유: 기본 가변 인자는 마치 한 번 만든 샐러드 그릇에 계속 재료를 추가하는 것과 같습니다. 처음에 만든 샐러드가 계속해서 변형되기 때문에, 나중에 다른 사람도 같은 그릇을 사용할 때 예상치 못한 결과가 나올 수 있습니다.
해결책: 매번 새로운 그릇을 만들어야 합니다.
예시 코드:
def add_to_list(value, items=[]):
items.append(value)
return items
print(add_to_list(1)) # [1]
print(add_to_list(2)) # [1, 2] - 같은 리스트 사용
수정된 코드:
def add_to_list(value, items=None):
if items is None:
items = []
items.append(value)
return items
print(add_to_list(1)) # [1]
print(add_to_list(2)) # [2] - 새로운 리스트 사용
3. 객체 참조에 의한 전달
비유: 변수를 친구에게 편지를 보내는 것과 비슷합니다. 편지에는 친구의 주소가 적혀 있지만, 친구가 편지를 읽고 내용을 바꿔도 원래의 주소는 변하지 않습니다. 즉, 원본은 그대로 유지됩니다.
예시 코드:
def modify_list(lst):
lst.append(4)
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 4] - 원본 리스트가 변경됨
4. is vs ==
비유: ==는 두 사람의 이름이 같은지를 확인하는 것과 같고, is는 두 사람이 같은 사람인지 확인하는 것입니다. 이름이 같아도 다른 사람일 수 있습니다.
예시 코드:
a = [1, 2, 3]
b = a
c = a[:]
print(a == b) # True (값이 같음)
print(a is b) # True (같은 객체)
print(a == c) # True (값이 같음)
print(a is c) # False (다른 객체)
5. 이터레이터와 제너레이터
비유: 이터레이터는 책을 읽는 것과 같고, 제너레이터는 책의 각 페이지를 한 장씩 넘기는 것과 같습니다. 이터레이터는 전체 책을 한 번에 읽지만, 제너레이터는 필요한 페이지를 한 장씩 읽습니다.
예시 코드:
# 이터레이터 예시
my_list = [1, 2, 3]
my_iter = iter(my_list)
print(next(my_iter)) # 1
print(next(my_iter)) # 2
# 제너레이터 예시
def countdown(n):
while n > 0:
yield n
n -= 1
for number in countdown(3):
print(number) # 3, 2, 1
6. 리스트 컴프리헨션 vs 제너레이터 표현식
비유: 리스트 컴프리헨션은 한 번에 모든 재료를 모아 요리를 하는 것과 같고, 제너레이터 표현식은 요리를 한 번에 한 접시씩 만드는 것과 같습니다. 후자는 메모리를 절약합니다.
예시 코드:
# 리스트 컴프리헨션
squares = [x * x for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
# 제너레이터 표현식
squares_gen = (x * x for x in range(5))
print(list(squares_gen)) # [0, 1, 4, 9, 16]
7. 컨텍스트 관리자 (with 문)
비유: 컨텍스트 관리자는 요리를 할 때 주방을 정리하는 것과 같습니다. 요리를 마친 후 주방을 깨끗하게 정리해 주는 것이죠. with 문을 사용하면 자동으로 정리해 줍니다.
예시 코드:
with open('example.txt', 'w') as f:
f.write('Hello, World!') # 파일을 자동으로 닫아줌
8. *args와 **kwargs
비유: *args는 여러 개의 과일을 담을 수 있는 바구니와 같고, **kwargs는 과일의 종류와 수량을 적어 놓은 메모와 같습니다. 바구니에는 과일이 들어가고, 메모에는 각 과일의 정보가 담깁니다.
예시 코드:
def fruit_basket(*args, **kwargs):
print("Fruits:", args)
print("Fruit quantities:", kwargs)
fruit_basket('apple', 'banana', apple=3, banana=5)
9. 데코레이터
비유: 데코레이터는 요리에 양념을 추가하는 것과 같습니다. 기본 요리에 양념을 추가하면 새로운 맛이 나듯이, 함수에 데코레이터를 추가하면 새로운 기능이 추가됩니다.
예시 코드:
def decorator_function(original_function):
def wrapper_function():
print("Wrapper executed before {}".format(original_function.__name__))
return original_function()
return wrapper_function
@decorator_function
def display():
print("Display function executed.")
display()
10. __name__ == "__main__"
비유: 이 문장은 마치 공연의 주인공이 무대에 나오는 것과 같습니다. 스크립트가 직접 실행될 때만 주인공이 등장하고, 다른 곳에서 불러올 때는 등장하지 않습니다.
예시 코드:
def main():
print("Running as script!")
if __name__ == "__main__":
main() # 스크립트가 직접 실행될 때만 호출됨
이러한 비유와 예시를 통해 파이썬의 개념들을 더 쉽게 이해할 수 있습니다. 각 개념은 처음에는 복잡하게 느껴질 수 있지만, 비유를 통해 친숙하게 다가갈 수 있습니다. 프로그래밍은 실험하고, 깨닫고, 반복하는 과정입니다. 여러분도 이러한 개념들을 활용하여 더 나은 코드를 작성해 보세요!
'IT' 카테고리의 다른 글
| 연구 성과의 가치를 높이는 비밀 ‘과학 글쓰기‘ (1) | 2025.11.05 |
|---|---|
| AI 시대, 좋은 결과를 얻는 프롬프트 작성 4단계 비법(RCTF) (0) | 2025.11.02 |
| PDF·이미지 문서 읽기, 이제 AI가 사람처럼 한다! (0) | 2025.10.30 |
| Claude Skills의 컨텍스트 엔지니어링 (0) | 2025.10.29 |
| LangChain 1.0 버전 릴리즈 (0) | 2025.10.29 |