이전 게시글에서는 map과 split을 활용하여 문제를 해결하였습니다. 하지만 단순하게 넘어가는 것 보다 map함수의 성질을 깊게 이해하는 것이 중요하다고 생각합니다. 이를 이해하면 앞으로의 코딩에서 map을 자주사용하게 되는데 이 때 알고 사용하는 것과 모르고 사용하는것의 차이점이 크기 때문이라고 생각하여 블로깅을 하나 더 하게 되었습니다.
map 함수를 사용할 때 list()를 호출하지 않는 경우, 반환되는 값은 map 객체, 즉 이터레이터입니다. 이 이터레이터는 계산된 값을 메모리에 저장하지 않고, 요청 시(예를 들어, 반복하거나 다른 함수에서 사용할 때) 실시간으로 해당 값을 계산하여 반환합니다.
map 객체 이해하기
map 객체는 단순히 요소들에 대한 연산을 정의하고 있지만, 이 연산들을 실제로 실행하지는 않습니다. 이는 "지연 계산" (lazy evaluation) 또는 "지연 로딩" (lazy loading)이라고 하며, 데이터가 실제로 필요할 때까지 계산을 미루는 기법입니다. 이는 메모리 사용을 효율적으로 관리하고, 필요할 때만 계산을 수행하도록 합니다.
map 객체 사용 예시
numbers = map(int, ['1', '2', '3'])
# map 객체 출력
print(numbers) # <map object at 메모리_주소>
# map 객체를 리스트로 변환하여 실제 값 확인
print(list(numbers)) # [1, 2, 3]
직관적인 또 다른 예시

map 객체의 특징
- 지연 계산: 요소들에 대한 연산이 실제로 필요할 때만 실행됩니다.
- 한 번만 사용 가능: map 객체는 한 번만 반복할 수 있습니다. 모든 요소를 한 번 순회한 후에는, 다시 요소를 얻기 위해서는 map 함수를 다시 호출해야 합니다.
list를 붙이지 않는 경우의 처리
map 객체를 직접 반복하거나 다른 함수에 전달할 수 있습니다. 예를 들어, sum 함수에 직접 전달할 수 있습니다:
numbers = map(int, ['1', '2', '3'])
total = sum(numbers) # map 객체를 sum 함수에 직접 사용
print(total) # 6
이 예시에서 map 객체는 sum 함수에 의해 내부적으로 순회되며, 모든 요소에 대한 연산이 실행되고 그 결과가 합산됩니다. 하지만 이후 numbers 객체를 다시 사용하려고 하면, 이미 모든 요소가 소모된 상태이기 때문에 더 이상의 요소를 얻을 수 없습니다.
요약하자면, map 함수를 사용할 때 list()를 호출하지 않으면, 계산 결과를 즉시 얻지 못하고 이터레이터 형태로 결과를 처리하게 됩니다. 이는 때때로 메모리 사용 최적화에 도움이 되지만, 결과를 다시 사용하려면 주의해야 합니다.
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_10869번 (0) | 2025.02.01 |
---|---|
단계별로 풀어보기_백준 10998번 (0) | 2025.01.27 |
단계별로 풀어보기_백준 1001번 with Python (0) | 2025.01.24 |
단계별로 풀어보기_백준 1000번 with Python (0) | 2025.01.23 |
단계별로 풀어보기_백준 2557번 with Python (0) | 2025.01.22 |