-
TypeScript 5.2의 새로운 키워드: 'using' - 자원 관리의 혁신IT Study/FE 2023. 9. 18. 09:00728x90
안녕하세요! 오늘은 정말 흥미로운 소식을 들고 왔습니다.
함께 공부하는 친구가 갑자기 "대박"이라고 하며, 노마드 코더의 영상 링크를 공유했는데요,
그 내용은 바로 TypeScript의 새로운 키워드 'using'이 나왔다는 것입니다.
저도 이 흥미로운 키워드에 대해 더 알아보고 공유하려 합니다. 바로 시작하겠습니다!
'using' 키워드란?
'using'은 TypeScript 5.2에서 새롭게 도입할 키워드로,
'using' 키워드가 적용된 코드 블록이나 함수의 실행이 종료될 때
Symbol.dispose 또는 Symbol.asyncDispose 메서드가 있는 객체를 자동으로 해제해 줍니다.
이를 통해 코드를 깔끔하고 안전하게 만들어 주며, 자원 관리를 효율적으로 할 수 있습니다.
Symbol.dispose는 동기적으로 자원을 해제하며,
Symbol.asyncDispose는 비동기적으로 (일반적으로 네트워크 요청, 파일 I/O 처리 시) 자원 해제합니다.
'using' 키워드와 함께 사용되면, 이러한 메서드들은 자동으로 호출되어
객체가 사용하던 자원(예: 파일 핸들, 데이터베이스 연결 등)을 안전하게 해제할 수 있게 돕습니다.실제 응용 사례
1. 파일 핸들 관리
파일을 열고 작업을 수행한 후에는 반드시 닫아야 하는데, 'using' 키워드를 사용하면 이 과정이 자동화됩니다,
더욱이 예외 처리도 간편해집니다.
- 기존 방법
import { open } from "node:fs/promises"; let filehandle; try { filehandle = await open("thefile.txt", "r"); // 파일과 관련된 작업 수행 } finally { await filehandle?.close(); }
- using 키워드를 사용한 새로운 방법
import { open } from "node:fs/promises"; const getFileHandle = async (path: string) => { const filehandle = await open(path, "r"); return { filehandle, [Symbol.asyncDispose]: async () => { await filehandle.close(); }, }; }; { await using file = await getFileHandle("thefile.txt"); // file.filehandle과 관련된 작업 수행 } // 자동으로 해제!
2. 데이터베이스 연결 관리
연결을 열고 작업을 수행한 후에는 연결을 닫아야 하는데, 'using' 키워드를 사용하면 이 과정이 자동화됩니다.
- 기존 방법
const connection = await getDb(); try { // 연결과 관련된 작업 수행 } finally { await connection.close(); }
- using 키워드를 사용한 새로운 방법
const getConnection = async () => { const connection = await getDb(); return { connection, [Symbol.asyncDispose]: async () => { await connection.close(); }, }; }; { await using db = await getConnection(); // db.connection과 관련된 작업 수행 } // 자동으로 닫힘!
3. 웹 소켓 관리
웹소켓 관리도 'using' 키워드의 도움을 받을 수 있습니다.
웹소켓 연결을 열고 데이터를 전송한 후에는 연결을 닫아야 하는데, 'using' 키워드를 사용하면 이 과정이 자동화됩니다.
- 예시
const getWebSocket = async (url: string) => { const socket = new WebSocket(url); return { socket, [Symbol.asyncDispose]: async () => { await socket.close(); }, }; }; { await using ws = await getWebSocket("wss://example.com/socket"); // ws.socket과 관련된 작업 수행 } // 자동으로 해제!
4. 네트워크 리소스 관리
'using' 키워드는 네트워크 리소스, 예를 들어 HTTP 요청과 같은 것들을 관리하는 데도 사용될 수 있습니다.
요청을 보내고 응답을 받은 후에는 연결을 닫아야 하는데, 'using' 키워드를 사용하면 이 과정이 자동화됩니다.
- 예시
const getNetworkResource = async (url: string) => { const response = await fetch(url); return { response, [Symbol.asyncDispose]: async () => { await response.body?.cancel(); }, }; }; { await using netResource = await getNetworkResource("https://api.example.com/data"); // netResource.response와 관련된 작업 수행 } // 자동으로 해제!
🆕 마무리
이렇게 'using' 키워드는 코드를 더욱 깔끔하고 안전하게 관리할 수 있게 하기 때문에
우리 개발자를 한층 더 편리하게 만들어 줄 것 같은데요, 저도 개인적으로 'using' 키워드를 꼭 써보고 싶네요 :)
그럼... 20000 다음 블로그 글에서 뵙겠습니다!
'IT Study > FE' 카테고리의 다른 글
[JavaScript] 변수 섀도잉 (0) 2023.10.02 [CSS3] ID 셀렉터와 클래스 셀렉터를 구분하여 사용하는 이유는? (0) 2023.09.28 [JavaScript] 문제를 통해 `실행 컨텍스트, 클로저, 스코프` 이해하기 (0) 2023.09.15 [TypeScript] TypeScript의 필수 문법 (기본 개념) (2) 2023.07.17 [Next.js/코딩애플] 프로그램 만드는 법 (feat. 코딩애플) (0) 2023.07.10