[파이썬python]코드 최적화 - 가독성 높이고 실행 속도 개선하기
지난 시간까지 우리는 API를 통해 실시간 데이터를 가져오는 시스템까지 구축했습니다. 하지만 코드가 길어질수록, 실행할 때마다 속도가 느려지거나 나중에 다시 코드를 열어봤을 때 "이게 도대체 무슨 코드지?"라며 당황하는 경우가 생깁니다. 오늘은 내 코드를 전문가의 수준으로 한 단계 끌어올리는 '코드 최적화' 기법을 다룹니다.
1. 코드 최적화란 무엇인가?
최적화는 단순히 프로그램을 빠르게 만드는 것만을 의미하지 않습니다. 핵심은 '가독성(Readability)'입니다. 남들이 읽기 편한 코드가 나중에 수정하기 쉽고, 버그를 찾기도 빠릅니다. 파이썬의 창시자인 귀도 반 로섬은 "코드는 작성되는 것보다 읽히는 횟수가 훨씬 많다"라고 했습니다. 나중에 내가 다시 봐도 바로 이해할 수 있게 만드는 것이 최적화의 첫걸음입니다.
2. 가독성을 높이는 3가지 원칙
변수명은 구체적으로: 6편에서 배웠듯, 'a', 'b' 대신 'user_email', 'total_count'처럼 직관적인 이름을 쓰세요.
주석 활용: 코드가 무엇을 하는지 설명하기보다, '왜 이렇게 짰는지'를 설명하세요. "이 함수는 네이버 서버의 정책 때문에 1초 쉬어준다"와 같이 의도를 적어두면 나중에 큰 도움이 됩니다.
불필요한 중복 제거: 같은 기능이 코드 여러 곳에 있다면 5편에서 배운 '함수'로 묶으세요. 수정할 때 한 곳만 고치면 됩니다.
3. 속도를 개선하는 파이썬다운 기법 (Pythonic)
파이썬만의 독특한 문법을 활용하면 훨씬 빠르게 동작하는 코드를 짤 수 있습니다.
리스트 컴프리헨션(List Comprehension): 반복문으로 리스트를 만들 때보다 훨씬 간결하고 빠릅니다. 기존 방식: new_list = [] for i in range(10): new_list.append(i * 2) 최적화 방식: new_list = [i * 2 for i in range(10)]
이런 식으로 한 줄로 코드를 압축하면 메모리 사용량도 줄고 실행 속도도 미세하게 개선됩니다.
4. 실무 팁: 무거운 작업은 한 번만 수행하기
크롤링이나 API 호출처럼 시간이 오래 걸리는 작업은 반복문 안에서 하지 마세요. 필요한 데이터는 미리 한 번만 가져와서 변수에 저장해두고, 반복문 안에서는 그 변수를 활용해야 합니다. 초보 시절 저는 반복문 안에 '파일 열기' 함수를 넣었다가 전체 작업 시간이 10배 이상 걸렸던 적이 있습니다. 무거운 작업은 반복문 밖으로 빼내는 것, 이것만 지켜도 성능이 크게 향상됩니다.
5. 주의사항 및 한계
'조기 최적화'의 함정: 처음부터 속도를 높이려고 복잡하게 코드를 짜지 마세요. 우선 잘 돌아가는 코드를 만드는 것이 1순위입니다. 코드가 너무 느려서 문제가 생길 때 최적화해도 늦지 않습니다.
가독성과 성능 사이의 균형: 가끔 속도를 너무 높이려다 코드가 암호처럼 변하는 경우가 있습니다. 1초를 줄이기 위해 나중에 유지보수가 안 되는 코드를 짜는 것보다, 조금 느려도 읽기 쉬운 코드가 실무에서는 훨씬 값어치 있습니다.
6. 나의 경험담
한번은 대량의 이메일을 발송하는 자동화 툴을 만들었는데, 속도를 높이겠다고 코드를 너무 복잡하게 꼬아놓았다가 나중에 메일 제목이 안 바뀌는 버그가 생겼습니다. 원인을 찾는 데만 일주일이 걸렸죠. 그때 깨달았습니다. '가장 빠른 최적화는 내 머릿속으로 로직이 명확히 그려지는 코드'라는 것을요. 여러분도 복잡함보다는 명쾌함을 먼저 선택하시길 바랍니다.
핵심 요약
코드 최적화는 속도보다 가독성과 유지보수성이 더 중요합니다.
리스트 컴프리헨션 같은 파이썬다운 문법을 활용하면 간결하고 효율적인 코드를 작성할 수 있습니다.
무거운 작업(파일 입출력, API 호출)은 반복문 밖으로 빼내는 것만으로도 성능을 크게 향상할 수 있습니다.
다음 편 예고
다음 시간에는 파이썬 시리즈의 마지막, 우리가 지금까지 학습한 내용을 정리하고 나만의 프로젝트를 세상에 배포하는 방법을 알아봅니다.
댓글 유도 질문
여러분은 평소 코드를 짜면서 "이 부분은 너무 길고 복잡하다"라고 고민했던 적이 있나요? 코드의 특정 부분을 공유해주시면 가독성을 높이는 힌트를 드릴 수 있습니다!
댓글
댓글 쓰기