개발자
안녕하세요. 파이썬을 사용하다 문득 궁금하여 질문을 남겨 봅니다. 파이썬을 사용하다 보면 단순 반복문을 사용할 때 보다 리스트 인프리헨션을 활용하거나, map함수를 사용할 때 처리 속도가 훨씬 빠르단 것을 알 수 있습니다. 이 때, 반복문의 중첩 수가 늘어 날수록 단순 중첩 반복문이 압도적으로 처리 속도가 느리게 나오는 경우가 있고, 이를 위해 조금 가독성이 떨어지지만 map이나 인프리헨션을 사용하곤 합니다. 제가 궁금한 것을 반복문의 처리 속도가 크게 차이가 없을 것 같은 적은 반복의 경우에도 인프리헨션을 사용하는 것이 좋을까요? 아니면 단순 반복문을 사용하여 가독성을 높이는 것이 좋을까요? 다음 예시는 SOP의 Minterm을 찾는 알고리즘 입니다. 총 반복 수는 16회 밖에 되지 않지만, 인프리헨션을 사용했을 때 가독성이 조금 떨어지는 것 같습니다. R, C = 4, 4 # (1) 인프리헨션 minterms = [format(i, '02b') + format(j, '02b') for i in range(R) for j in range(C) if map[i][j] == 1] # (2) 단순 반복문 for i in range(R): for j in range(C): if map[i][j] == 1: minterm = format(i, '02b') + format(j, '02b') minterms.append(minterm) 이런 경우에도 인프리헨션을 활용하는 것이 맞을까요?
답변 2
인기 답변
파이썬으로 프로그래밍하실 때 comprehension을 어느 정도 사용하는 게 좋을지 궁금하신 것 같아요. (질문 내용에 "인프리헨션"이라고 하셨는데, 실무에서는 "컴프리헨션"이라는 용어가 더 많이 사용되고 있으니 참고 바랍니다.) 파이썬의 꽃이라고도 불리우는 comprehension은 반복문과 조건문이 사용된 여러 줄의 코드를 한 줄로 줄여주는 상당히 독특한 문법인데요. 가독성 측면에서는 개발자 사이에서 다소 호불호가 갈리는 코딩 스타일입니다. 주변에 보면 파이썬으로만 프로그래밍하시는 분들은 오히려 코드가 읽기 쉬워진다고 하시는데, 여러 프로그래밍 언어를 쓰시는 분들은 아무래도 일반적인 반복문이 더 읽기 편하다고들 하십니다. 질문자 분께서는 두 번째 스타일이 가독성이 더 좋다고 느끼시는 것 같은데요. 저 같은 경우에는 파이썬으로 오랫동안 프로그래밍했기 때문에 가독성에 있어서 큰 차이가 느껴지지 않는 것 같습니다. 성능 측면에서는 적어도 예제로 주신 코드에서는 comprehension을 쓰시든 반복문과 조건문을 조합해서 쓰시든 시간 복잡도는 `O(R * C)`로 유의미한 차이가 있다고 보기는 어렵습니다. 아마도 평소에 comprehension이 더 빠르다고 느끼셨던 것은 파이썬 인터프리터가 내부적으로 성능 최적화를 해주기 때문일 것 같은데요. 하지만 어느 정도 규모가 있는 파이썬 애플리케이션을 개발할 때는 단순히 성능을 위해서 반복문을 피하고 comprehension을 택하는 경우는 많지 않습니다. 그 둘의 성능 차이는 애플리케이션을 다른 측면에서 최적화했을 때 얻을 수 있는 성능 이득이 비하면 무시가 가능할 정도로 미약하거든요. 한 가지 더 조언을 드리자면, 나중에 회사에 들아기시면 대부분 팀 단위로 개발을 하실텐데요. 이러한 팀 프로젝트에서는 다른 팀원들이 읽기 편하도록 코드를 작성하는 것이 무엇보다 중요합니다. 만약에, 파이썬에 익숙하지 않은 팀원들이 있다면 comprehension 대신에 반복문을 쓰는 것이 도움이 될 수 있는데요. 이를 통해서 팀원들이 코드를 빠르게 이해하고 쉽게 수정할 수 있게 된다면 프로젝트의 생산성 향상에 크게 기여할 수 있기 때문입니다.
제승완
작성자
베스핀글로벌 구글 본부/구글 TS 팀 사원 • 2023년 10월 07일
답변 감사합니다!! 큰 도움이 되었어요!!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 10월 01일
리스트 인프리헨션과 단순 반복문 간의 선택은 대부분의 경우 개인의 스타일이나 특정 작업에 따라 달라질 수 있습니다. 둘 다 적절히 사용될 수 있는 도구입니다. 리스트 인프리헨션은 코드를 최적화하여 속도를 향상시키지만, 때로는 복잡성과 가독성을 희생할 수 있습니다. 이것은 특히 중첩된 인프리헨션이 포함된 복잡한 작업에서 참고해야 합니다. 반면에, 일반적인 반복문(for loops)은 코드가 좀 더 길어질 수 있지만, 경우에 따라 더 명확하고 읽기 쉬울 수 있으며 반복 로직이 복잡해질수록 이런 장점이 부각됩니다. 따라서 어떤 방법을 선택할 것인지는 크게 세 가지 요소를 고려해보시면 좋습니다: 1. 가독성: 코드는 다른 사람들이 이해하기 쉽게 작성되어야 합니다. 2. 성능: 리스트 인프리헨션은 일반적으로 for loop보다 빠릅니다. 3. 유지 보수: 나중에 코드를 수정하거나 디버깅해야 하는 경우를 생각해보세요. 위에 제시한 예제의 경우 반복 횟수가 매우 적으므로 성능 차이는 거의 없습니다. 따라서 원하는 가독성에 따라 선택하시면 될 것 같습니다. 가독성을 중요하게 생각한다면 반복문을, 성능 최적화에 초점을 맞춘다면 리스트 인프리헨션을 사용하세요. 이 두 방법 사이에 '정답'은 없으며 상황과 필요에 따라 적절한 것을 선택하는 것이 중요합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!