-
List Comprehension의 어원자료구조&알고리즘 2020. 1. 10. 00:36
Python의 "List Comprehension"
Python의 list comprehension 표현을 공부하던 중, list comprehension이라는 표현 자체에 궁금증이 생겼다.
list comprehension이란, 파이썬의 자료형 중 list 자료형을 [1,2,3,4,5] 이런 식으로 모든 요소를 직접 나열할 수도 있지만, [x for x in range(1, 6)] 과 같은 식으로 나타낼 수도 있다. 이러한 방법을 list comprehension이라고 한다.
(list comprehension 에 대한 추가적 설명이나, 다른 자료형의 comprehension이 궁금하면 참고할 곳: https://mingrammer.com/introduce-comprehension-of-python/)
Why list comprehension is called so?
그러나 comprehension 이라는 단어 자체도 왜 쓰였는지 모르겠어서, 구글에 검색한 결과 위와 같은 제목의 stakoverflow 질문글을 찾을 수 있었다. (질문 원글: https://stackoverflow.com/questions/1903980/why-list-comprehension-is-called-so-in-python) 질문자 역시 python의 list comprehension이라는 용어가 어떻게 이름 붙여진 것인지를 궁금해하였다. 답변에 따르면 list comprehension은 set comprehension 이라는 용어로부터 나왔다. set comprehension은 수학에서의 집합 표현과 관련이 있었다. 그래서 set comprehension을 찾아보았다. (이 검색어 그대로 찾으면 python의 set comprehension 표현식 밖에 안 나오기 때문에 discrete mathmatics같은 검색어들이 추가로 필요했다)
Set Comprehension
Discrete Mathmatics Using a Computer 교재에 보면 다음과 같은 내용이 있다. (출처: https://books.google.co.kr/books?id=yP4MJ36C4ZgC&pg=PA113&lpg=PA113&dq=discrete+set-comprehension&source=bl&ots=2itK30Fevd&sig=ACfU3U0dGDJ2ye5lfMol28rec55Vl9XjUA&hl=ko&sa=X&ved=2ahUKEwic2fW42fbmAhVSL6YKHdkRAPsQ6AEwDXoECAkQAQ#v=onepage&q=discrete%20set-comprehension&f=false)
Another standard way to define sets is the set comprehension. In its simplest form, a set comprehension is written as (생략) {x | x ∈ N ∧ even x}.
이 내용을 보면, set comprehension은 집합을 정의하는 방법이다. 이걸 보고 나니 set comprehension 이라는 단어가 어떤 뜻인지 감을 잡을 수 있었다. list comprehension은 수학의 set comprehension으로부터 나왔다는 이야기 말고도, set builder 로부터 나왔다는 이야기들도 찾을 수 있었는데 (https://dubbsong.github.io/dev/2018/12/05/python-sololearn-ch05-06/), 그래서 set builder를 찾아보았다. 위키백과의 set-builder notation (조건제시법, https://en.wikipedia.org/wiki/Set-builder_notation) 문서를 보면, 집합을 특성을 이용해 정의하는 방법은 set comprehension 으로도 알려져있다는 부분이 있다. 이 두 개념은 모두 집합을 숫자로 나열해서 표현하는게 아니라, 그 조건으로 표현하는 방법이라는 부분에서 같은 의미인 것으로 보인다.
Defining sets by properties is also known as set comprehension, set abstraction or as defining a set's intension.
원래 수학에서 쓰이던 개념이, 이와 비슷한 문법을 구현한 프로그래밍 언어들에서 사용되자 어느 순간 그 이름을 사용하게 되었다. 위키백과에 따르면 1977년 프로그래밍 언어 NPL의 명세서에 집합 형성 구조를 표현하기 위해 처음으로 comprehension이라는 용어를 사용하였다고 한다 (https://ko.wikipedia.org/wiki/%EB%A6%AC%EC%8A%A4%ED%8A%B8_%EC%BA%84%ED%94%84%EB%A6%AC%ED%97%A8%EC%85%98).
여기까지 찾아보았을 때, 수학에서 집합을 조건을 통해 표현하는 것과 프로그래밍 언어들에서 사용하는 자료형 중 요소들을 직접 나열하지 않고 조건을 통해 표현하는 자료형과 형태가 유사하고, 또 그 의미도 유사하기 때문에 comprehension이라는 용어를 사용한다는 것을 이해할 수 있었다. 하지만 아직, comprehension이라는 단어 자체의 의미를 제대로 이해하지 못해서, 이 용어에 대해 더 알아보고자 했다.
Comprehension
comprehension은 이해, 포용력 등의 의미를 가지고 있는데, 그렇다고 해서 list comprehension이 리스트 포용처럼 comprehension의 널리 쓰이는 의미로 볼 수는 없어보였다. 많이 번역되는 것이 리스트 함축 (https://itholic.github.io/python-comprehension/), 리스트 표현식, 리스트 조건식 (https://shoark7.github.io/programming/python/about-list-comprehension-python) 등이었다. python에서 list comprehension이 무슨 뜻인지 물어본 stackoverflow 답변 (https://stackoverflow.com/questions/1903980/why-list-comprehension-is-called-so-in-python) 중에서 도움이 되는 답변을 얻을 수 있었다. 바로 "Comprehension"이 "understanding"의 의미 뿐 아니라 논리학에서는 "inclusion" 의 의미로 사용된다는 것이다. 포함하는 것을 의미하기 때문에 수학에서 그 용어가 사용될 수 있었던 것이고, 이후 list comprehension 등에서도 표현식을 통해 (마치 집합 표현처럼) 포함하고 싶은 것을 프로그래머가 작성하기 때문에 여기서도 이 용어가 적용될 수 있었던 것이다.
In a list or set comprehension, instead of giving the elements of the list or set explicitly, the programmer is describing what they comprehend (in the "include" sense) with an expression.
더 구체적으로 어원을 찾아보면 com(completely) 와 prehend(to seize) 가 결합하여 '완전하게 잡아두다' 라는 의미로 쓰인다고 한다. (어원 설명: http://blog.daum.net/shintc200/28) 그래서 집합 안에 필요한 요소들을 완전하게 의미를 통해 표현할 수 있는 방법이기 때문에 comprehension이라는 용어가 사용된 것 같다. (enumeration과 comprehension의 차이: https://books.google.co.kr/books?id=103UBwAAQBAJ&pg=PA195&lpg=PA195&dq=mathematics+enumeration+and+comprehension&source=bl&ots=aHPX27mo4y&sig=ACfU3U0_utwtooritYiyr50T_gTeyA54iw&hl=ko&sa=X&ved=2ahUKEwjx-oeq6_bmAhVrHKYKHTHqAV4Q6AEwA3oECAgQAQ#v=onepage&q=mathematics%20enumeration%20and%20comprehension&f=false)
결론
요약하면, comprehension이란 용어는 포함을 의미하는 단어이고, 이것이 수학에서 집합을 표현하는데 사용되었는데, 이후 프로그래밍 언어에서 집합과 비슷한 형태의 구조를 표현하기 위해 comprehension이란 단어를 차용하게 되었고, 그래서 현재 python 등의 언어에서도 list comprehension이라는 표현을 볼 수 있는 것이었다.
반응형'자료구조&알고리즘' 카테고리의 다른 글
211101 PPT 자료 (0) 2021.11.01 삼성 SW 역량테스트 A형 (Advanced 등급) (0) 2020.02.07 삼성 SW 역량테스트 B형 (Professional 등급) (0) 2019.12.06 SWEASS MH1821 민국이는 내일 할거야 (0) 2019.10.16 SWEASS H1919 Battleship (0) 2019.10.16 댓글