2025년 8월 26일 화요일

python with 문법이 js using 문법으로

이런저런 프로그래밍 언어들의 파편을 구경하면서 유용하다고 생각했던 것들이 몇 가지 있다.

파이썬의 with 문법도 그 중 하나다.

(검색을 더 해보니 C#에도 똑같은 용도로 using이 있나보다. https://onepredict.github.io/using-keyword/#%EC%84%A0%ED%96%89-%EA%B8%B0%EC%88%A0 )

 

https://www.geeksforgeeks.org/python/with-statement-in-python/

with open("example.txt", "r") as file:
    content = file.read()
    print(content)  # File closes automatically

이렇게 한 블럭 안에서만 쓰고 버릴 변수를 만들어준다. 

직선적인 흐름에서는 열고 닫는 게 자연스럽지만 early return 같은 경우에는 그 앞에 만들었던 이런저런 연결을 닫아준다던지 하는 작업 때문에 return 앞부분이 번잡해지는 경우가 생기는데 그럴 때 유용할 것이다. 

 

PHP는 이런 게 없는 걸로 알고,

js는 with 문법 자체는 있지만 as 변수명으로 이름을 명시하지 않고 그 블럭 안에서 this를 대체하는 방식이어서 여러 단점이 있고 MDN에도 비추라고 구분되어 있다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with

 

그래서 js에 블럭 안에서만 유효한 let이 생긴 뒤로는 따로 블럭만 하나 열어서 그 안에 let으로 변수를 만들어주는 식으로 가끔 썼던 기억이 있다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/let

  

그러다 using 문법이 들어온 걸 알게 되었다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/using

https://github.com/tc39/proposal-explicit-resource-management

typescript에서는 이미 몇 년이 넘은 제안이다. MDN 문서 기준으로 Node.js는 지원을 안 하지만 다른 브라우저들은 지원하는 게 이유가 있었다.

 

https://deno.com/blog/updates-from-tc39#explicit-resource-management-using

https://deno.com/blog/v2.3#explicit-resource-management-and-the-using-keyword 

Deno에서는 2.3 버전부터 지원했다고 한다. 2025년 4월 말에 발표된 버전이니까 여기도 지원이 아주 오래된 건 아니다.

Node.js에도 곧 반영이 되면 좋겠다.