소프트 키워드(Soft Keyword)

키워드는 예약어(reserved word)라고도 하며, 문법적으로 특별한 의미를 지니기 때문에 변수나 함수의 이름으로 사용하는 것이 제한되는 단어들을 말합니다. 예를 들어 if, for, while 과 같은 단어들은 특정한 구문을 표현하기 위해 문법적으로 특별한 의미를 지니도록 지정되어 있으며, 이러한 단어를 변수명으로 사용하려는 경우, Syntax Error가 발생하면서 정상적으로 처리되지 않습니다.

그런데 문법을 읽고 이해하기 쉽게 만들기 위해서 이러한 키워드들은 보통 아주 일상적인 단어로 표현되는 경향이 있습니다. 그런데 많은 사람들이 자신이 짓는 변수의 이름도 일상적이거나 일반적인 단어를 그대로 사용하는 경향이 있습니다. 또한 언어의 역사가 진행되는 과정에서 새로운 기능이 추가되고 이를 지원하기 위한 문법이 추가되면서, 이전에는 사용자가 이름으로 사용할 수 있던 단어가 그렇지 않게 되는 경우도 있습니다. 사실 파이썬은 초창기부터 예약어의 개수를 가능한 작은 수준으로 유지하려고 애썼습니다. 심지어 참/거짓을 나타내는 값의 이름인 True, False도 파이썬 2에서는 예약어가 아니었습니다. (즉 False = 1 과 같은 구문이 문법적으로 아무런 문제가 없었습니다.)

자, 한 가지 예를 들어 보겠습니다. 파이썬 3.11에서는 match 구문이 추가되면서 이 문법에서 사용하기 위한 새로운 키워드인 match, case, _ 가 추가되었습니다. 그런데 당장 match 만해도 키워드로 지정하면 문제가 될 수 있습니다. 정규식 모듈인 re 모듈 내에도 match() 함수가 있기 때문에, 키워드로 추가하는 순간 하위 버전에서의 호환성이 무너지게 됩니다.

이처럼 시간에 따라서 언어에 새로운 기능을 추가하기로 결정하게 되면 그 결과 예약어가 늘어나게 되고, 이는 표준 라이브러리를 비롯하여 제3자에 의해 작성된 기존 코드들과 호환성 문제가 발생하게 됩니다. 이 문제를 어떻게 피할 수 있을까요?

사용자들이 사용해버린 단어들은 모두 변수나 함수 혹은 모듈 등의 식별자(identifier)입니다. 그런데 식별자와 키워드는 파이썬 문법에서 등장하는 위치가 다릅니다. 따라서 사실상 키워드와 같은 식별자가 있을 때, 문법상 키워드가 위치해야 하는 곳에서는 같은 단어를 키워드로 인식하게끔 하는 것이 가능합니다.

이처럼 키워드로 기능하는 단어를 식별자로 사용하도록 허용하는 것을 소프트 키워드라고 부릅니다. 방금 언급했듯이 파이썬 3.11에서 match, case, _ 와 같은 단어들이 소프트 키워드로 추가되었고, 이 단어들은 match 구문(statement)내에서만 키워드처럼 작동합니다.

소프트 키워드를 예약어로 구분하는 것은 파서 단위에서 처리되며, 토크나이저는 이러한 기능을 사용하지 않습니다. 따라서 같은 코드에서 소프트 키워드와 같은 단어를 변수명으로 사용한다 하더라도 문제가 생기지 않기 때문에, 소프트키워드 추가 이전의 코드와 같이 사용하더라도 큰 문제는 발생하지 않습니다.

파이썬 3.12에서 타입 별칭 구문에 대한 문법이 추가되었고 이때 사용하는 type 역시 소프트 키워드로 정의되어 있습니다. 이미 내장함수에 type() 이라는 함수가 존재하고 있죠. 따라서 type integers = list[int] 와 같은 식으로 사용하는 때에만 예약어로 사용됩니다. 그 외의 경우에는 type은 내장함수 type() (혹은 type은 그 자체로 type 이라는 클래스이기도 합니다.)을 가리키는 말입니다. (파이썬에서 내장 함수는 내장 라이브러리의 다른 함수들과 같이, 일반적인 함수 이름이며 실행 시간에 다른 함수를 가리키도록 바인딩을 덮어쓰는 것이 가능합니다.)

Read more

워드프레스에서 고스트로 이전

워드프레스에서 고스트로 이전

이 글을 쓰면서도 믿기 힘든 사실인데, 블로그라는 걸 처음 시작한지가 20년이 되었습니다. 이글루스에서 처음 시작했다가, SK컴즈가 인수한다고 발표함과 동시에 워드프레스로 플랫폼을 옮겼죠. 워드프레스오 옮긴 이후에는 호스팅 환경을 이리 저리 옮기긴 했지만 거의 18년 가까이 워드프레스를 사용해온 것 같습니다. 그 동안 워드프레스는 블로깅 툴에서 명실상부한 범용CMS로 발전했습니다. 사실 웬만한 홈페이지들은 이제

By sooop
띄어쓰기에 대한 생각

띄어쓰기에 대한 생각

업무 메일을 쓸 때 가장 많이 쓰는 말 중에 하나가 메일 말미에 ‘업무에 참고 부탁 드립니다.‘인데요, 어느 날부터 아웃룩에서 이 ‘부탁 드립니다’가 틀렸다고 맞춤법 지적을 하기 시작했습니다. 맞는 말은 ‘부탁드립니다’라고 붙여 쓰는 거라고. 사실 아래아한글 시절부터 이전의 MS워드까지, 워드프로세서들의 한국어 맞춤법 검사 실력은 거의 있으나 마나 한

By sooop

구글 포토에서 아이클라우드로 탈출한 후기

한 때 구글 포토가 백업 용량을 무제한으로 제공해 주겠다고해서, 구글 포토를 사용해서 사진을 백업해왔습니다. 물론 이 이야기의 결말은 저나 이 글을 읽고 있는 여러분이나 모두 알고 있습니다. 사실 AI에게 학습 시킬 이미지 데이터를 모으기 위한 것일 뿐이라거나 하는 이야기는 그 당시에도 있었습니다만, 에이 그래도 구글인데 용량은 넉넉하게 주겠지…하는 순진한

By sooop

Julia의 함수 사용팁

연산자의 함수적 표기 Julia의 연산자는 기본적으로 함수이며, 함수 호출 표기와 같은 방식으로 호출하는 것이 가능합니다. 또한 그 자체로 함수이기 때문에 filter(), map() 과 같이 함수를 인자로 받는 함수에도 연산자를 그대로 적용하는 것이 가능합니다. 특히 + 연산자는 sum() 함수와 같이 여러 인자를 받아 인자들의 합을 구할 수 있습니다. 2 + 3 # = 5 +(2,

By sooop